LyoKICogKEMpIENvcHlyaWdodCAyMDAyCiAqIERhbmllbCBFbmdzdHL2bSwgT21pY3JvbiBDZXRpIEFCLCBkYW5pZWxAb21pY3Jvbi5zZQogKgogKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwogKiBwcm9qZWN0LgogKgogKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCiAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCiAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAogKiBNQSAwMjExMS0xMzA3IFVTQQogKi8KCi8qCiAqIEJhc2VkIG9uIG1zYmlvcy5jIGZyb20gcm9sbyAxLjY6CiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiAoQykgQ29weXJpZ2h0IDIwMDAKICogU3lzZ28gUmVhbC1UaW1lIFNvbHV0aW9ucyBHbWJICiAqIEtsZWluLVdpbnRlcm5oZWltLCBHZXJtYW55CiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKi8KCiNpbmNsdWRlICJiaW9zLmgiCgovKgogKiBEdXJpbmcgaXQncyBpbml0aWFsaXphdGlvbiBwaGFzZSwgYmVmb3JlIHN3aXRjaGluZyB0byBwcm90ZWN0ZWQKICogbW9kZSwgdGhlIExpbnV4IEtlcm5lbCBtYWtlcyBhIGZldyBCSU9TIGNhbGxzLiBUaGlzIHdvbid0IHdvcmsKICogaWYgdGhlIGJvYXJkIGRvZXMgbm90IGhhdmUgYSBCSU9TLgogKgogKiBUaGlzIGlzIGEgdmVyeSBtaW5pbWFsaXNpYyBCSU9TIHRoYXQgc3VwcGxpZXMganVzdCBlbm91Z2gKICogZnVuY3Rpb25hbGl0eSB0byBrZWVwIHRoZSBMaW51eCBLZXJuZWwgaGFwcHkuIEl0IGlzIE5PVAogKiBhIGdlbmVyYWwgcHVycG9zZSByZXBsYWNlbWVudCBmb3IgYSByZWFsIEJJT1MgISEKICovCgoKLnNlY3Rpb24gLmJpb3MsICJheCIKLmNvZGUxNgoub3JnIDAKCS8qIGEgY2FsbCB0byBmMDAwOjAgc2hvdWxkIHdhcm1ib290ICovCglqbXAJcmVhbG1vZGVfcmVzZXQKCi5nbG9ibCBybV9pbnQwMAouaGlkZGVuIHJtX2ludDAwCi50eXBlIHJtX2ludDAwLCBAZnVuY3Rpb24Kcm1faW50MDA6CglwdXNodwkkMAoJam1wCWFueV9pbnRlcnJ1cHQxNgouZ2xvYmwgcm1faW50MDEKLmhpZGRlbiBybV9pbnQwMQoudHlwZSBybV9pbnQwMSwgQGZ1bmN0aW9uCnJtX2ludDAxOgoJcHVzaHcJJDEKCWptcAlhbnlfaW50ZXJydXB0MTYKLmdsb2JsIHJtX2ludDAyCi5oaWRkZW4gcm1faW50MDIKLnR5cGUgcm1faW50MDIsIEBmdW5jdGlvbgpybV9pbnQwMjoKCXB1c2h3CSQyCglqbXAJYW55X2ludGVycnVwdDE2Ci5nbG9ibCBybV9pbnQwMwouaGlkZGVuIHJtX2ludDAzCi50eXBlIHJtX2ludDAzLCBAZnVuY3Rpb24Kcm1faW50MDM6CglwdXNodwkkMwoJam1wCWFueV9pbnRlcnJ1cHQxNgouZ2xvYmwgcm1faW50MDQKLmhpZGRlbiBybV9pbnQwNAoudHlwZSBybV9pbnQwNCwgQGZ1bmN0aW9uCnJtX2ludDA0OgoJcHVzaHcJJDQKCWptcAlhbnlfaW50ZXJydXB0MTYKLmdsb2JsIHJtX2ludDA1Ci5oaWRkZW4gcm1faW50MDUKLnR5cGUgcm1faW50MDUsIEBmdW5jdGlvbgpybV9pbnQwNToKCXB1c2h3CSQ1CglqbXAJYW55X2ludGVycnVwdDE2Ci5nbG9ibCBybV9pbnQwNgouaGlkZGVuIHJtX2ludDA2Ci50eXBlIHJtX2ludDA2LCBAZnVuY3Rpb24Kcm1faW50MDY6CglwdXNodwkkNgoJam1wCWFueV9pbnRlcnJ1cHQxNgouZ2xvYmwgcm1faW50MDcKLmhpZGRlbiBybV9pbnQwNwoudHlwZSBybV9pbnQwNywgQGZ1bmN0aW9uCnJtX2ludDA3OgoJcHVzaHcJJDcKCWptcAlhbnlfaW50ZXJydXB0MTYKLmdsb2JsIHJtX2ludDA4Ci5oaWRkZW4gcm1faW50MDgKLnR5cGUgcm1faW50MDgsIEBmdW5jdGlvbgpybV9pbnQwODoKCXB1c2h3CSQ4CglqbXAJYW55X2ludGVycnVwdDE2Ci5nbG9ibCBybV9pbnQwOQouaGlkZGVuIHJtX2ludDA5Ci50eXBlIHJtX2ludDA5LCBAZnVuY3Rpb24Kcm1faW50MDk6CglwdXNodwkkOQoJam1wCWFueV9pbnRlcnJ1cHQxNgouZ2xvYmwgcm1faW50MGEKLmhpZGRlbiBybV9pbnQwYQoudHlwZSBybV9pbnQwYSwgQGZ1bmN0aW9uCnJtX2ludDBhOgoJcHVzaHcJJDEwCglqbXAJYW55X2ludGVycnVwdDE2Ci5nbG9ibCBybV9pbnQwYgouaGlkZGVuIHJtX2ludDBiCi50eXBlIHJtX2ludDBiLCBAZnVuY3Rpb24Kcm1faW50MGI6CglwdXNodwkkMTEKCWptcAlhbnlfaW50ZXJydXB0MTYKLmdsb2JsIHJtX2ludDBjCi5oaWRkZW4gcm1faW50MGMKLnR5cGUgcm1faW50MGMsIEBmdW5jdGlvbgpybV9pbnQwYzoKCXB1c2h3CSQxMgoJam1wCWFueV9pbnRlcnJ1cHQxNgouZ2xvYmwgcm1faW50MGQKLmhpZGRlbiBybV9pbnQwZAoudHlwZSBybV9pbnQwZCwgQGZ1bmN0aW9uCnJtX2ludDBkOgoJcHVzaHcJJDEzCglqbXAJYW55X2ludGVycnVwdDE2Ci5nbG9ibCBybV9pbnQwZQouaGlkZGVuIHJtX2ludDBlCi50eXBlIHJtX2ludDBlLCBAZnVuY3Rpb24Kcm1faW50MGU6CglwdXNodwkkMTQKCWptcAlhbnlfaW50ZXJydXB0MTYKLmdsb2JsIHJtX2ludDBmCi5oaWRkZW4gcm1faW50MGYKLnR5cGUgcm1faW50MGYsIEBmdW5jdGlvbgpybV9pbnQwZjoKCXB1c2h3CSQxNQoJam1wCWFueV9pbnRlcnJ1cHQxNgouZ2xvYmwgcm1faW50MTAKLmhpZGRlbiBybV9pbnQxMAoudHlwZSBybV9pbnQxMCwgQGZ1bmN0aW9uCnJtX2ludDEwOgoJcHVzaHcJJDE2CglqbXAJYW55X2ludGVycnVwdDE2Ci5nbG9ibCBybV9pbnQxMQouaGlkZGVuIHJtX2ludDExCi50eXBlIHJtX2ludDExLCBAZnVuY3Rpb24Kcm1faW50MTE6CglwdXNodwkkMTcKCWptcAlhbnlfaW50ZXJydXB0MTYKLmdsb2JsIHJtX2ludDEyCi5oaWRkZW4gcm1faW50MTIKLnR5cGUgcm1faW50MTIsIEBmdW5jdGlvbgpybV9pbnQxMjoKCXB1c2h3CSQxOAoJam1wCWFueV9pbnRlcnJ1cHQxNgouZ2xvYmwgcm1faW50MTMKLmhpZGRlbiBybV9pbnQxMwoudHlwZSBybV9pbnQxMywgQGZ1bmN0aW9uCnJtX2ludDEzOgoJcHVzaHcJJDE5CglqbXAJYW55X2ludGVycnVwdDE2Ci5nbG9ibCBybV9pbnQxNAouaGlkZGVuIHJtX2ludDE0Ci50eXBlIHJtX2ludDE0LCBAZnVuY3Rpb24Kcm1faW50MTQ6CglwdXNodwkkMjAKCWptcAlhbnlfaW50ZXJydXB0MTYKLmdsb2JsIHJtX2ludDE1Ci5oaWRkZW4gcm1faW50MTUKLnR5cGUgcm1faW50MTUsIEBmdW5jdGlvbgpybV9pbnQxNToKCXB1c2h3CSQyMQoJam1wCWFueV9pbnRlcnJ1cHQxNgouZ2xvYmwgcm1faW50MTYKLmhpZGRlbiBybV9pbnQxNgoudHlwZSBybV9pbnQxNiwgQGZ1bmN0aW9uCnJtX2ludDE2OgoJcHVzaHcJJDIyCglqbXAJYW55X2ludGVycnVwdDE2Ci5nbG9ibCBybV9pbnQxNwouaGlkZGVuIHJtX2ludDE3Ci50eXBlIHJtX2ludDE3LCBAZnVuY3Rpb24Kcm1faW50MTc6CglwdXNodwkkMjMKCWptcAlhbnlfaW50ZXJydXB0MTYKLmdsb2JsIHJtX2ludDE4Ci5oaWRkZW4gcm1faW50MTgKLnR5cGUgcm1faW50MTgsIEBmdW5jdGlvbgpybV9pbnQxODoKCXB1c2h3CSQyNAoJam1wCWFueV9pbnRlcnJ1cHQxNgouZ2xvYmwgcm1faW50MTkKLmhpZGRlbiBybV9pbnQxOQoudHlwZSBybV9pbnQxOSwgQGZ1bmN0aW9uCnJtX2ludDE5OgoJcHVzaHcJJDI1CglqbXAJYW55X2ludGVycnVwdDE2Ci5nbG9ibCBybV9pbnQxYQouaGlkZGVuIHJtX2ludDFhCi50eXBlIHJtX2ludDFhLCBAZnVuY3Rpb24Kcm1faW50MWE6CglwdXNodwkkMjYKCWptcAlhbnlfaW50ZXJydXB0MTYKLmdsb2JsIHJtX2ludDFiCi5oaWRkZW4gcm1faW50MWIKLnR5cGUgcm1faW50MWIsIEBmdW5jdGlvbgpybV9pbnQxYjoKCXB1c2h3CSQyNwoJam1wCWFueV9pbnRlcnJ1cHQxNgouZ2xvYmwgcm1faW50MWMKLmhpZGRlbiBybV9pbnQxYwoudHlwZSBybV9pbnQxYywgQGZ1bmN0aW9uCnJtX2ludDFjOgoJcHVzaHcJJDI4CglqbXAJYW55X2ludGVycnVwdDE2Ci5nbG9ibCBybV9pbnQxZAouaGlkZGVuIHJtX2ludDFkCi50eXBlIHJtX2ludDFkLCBAZnVuY3Rpb24Kcm1faW50MWQ6CglwdXNodwkkMjkKCWptcAlhbnlfaW50ZXJydXB0MTYKLmdsb2JsIHJtX2ludDFlCi5oaWRkZW4gcm1faW50MWUKLnR5cGUgcm1faW50MWUsIEBmdW5jdGlvbgpybV9pbnQxZToKCXB1c2h3CSQzMAoJam1wCWFueV9pbnRlcnJ1cHQxNgouZ2xvYmwgcm1faW50MWYKLmhpZGRlbiBybV9pbnQxZgoudHlwZSBybV9pbnQxZiwgQGZ1bmN0aW9uCnJtX2ludDFmOgoJcHVzaHcJJDMxCglqbXAJYW55X2ludGVycnVwdDE2Ci5nbG9ibCBybV9kZWZfaW50Ci5oaWRkZW4gcm1fZGVmX2ludAoudHlwZSBybV9kZWZfaW50LCBAZnVuY3Rpb24Kcm1fZGVmX2ludDoKCWlyZXQKCgoJLyoKCSAqIEFsbCBpbnRlcnJ1cHQganVtcHRhYmxlIGVudHJpZXMganVtcCB0byBoZXJlCgkgKiBhZnRlciBwdXNoaW5nIHRoZSBpbnRlcnJ1cHQgdmVjdG9yIG51bWJlciBvbnRvIHRoZQoJICogc3RhY2suCgkgKi8KYW55X2ludGVycnVwdDE2OgoJTUFLRV9CSU9TX1NUQUNLCgpncwltb3Z3CU9GRlNfVkVDVE9SKCVicCksICVheAoJY21wdwkkMHgxMCwgJWF4CglqZQlMaW50XzEwaAoJY21wdwkkMHgxMSwgJWF4CglqZQlMaW50XzExaAoJY21wdwkkMHgxMiwgJWF4CglqZQlMaW50XzEyaAoJY21wdwkkMHgxMywgJWF4CglqZQlMaW50XzEzaAoJY21wdwkkMHgxNSwgJWF4CglqZQlMaW50XzE1aAoJY21wdwkkMHgxNiwgJWF4CglqZQlMaW50XzE2aAoJY21wdwkkMHgxYSwgJWF4CglqZQlMaW50XzFhaAoJbW92dwkkMHhmZmZmLCAlYXgKCWptcAlMb3V0CkxpbnRfMTBoOgkJCQkJLyogVkdBIEJJT1Mgc2VydmljZXMgKi8KCWNhbGwJYmlvc18xMGgKCWptcAlMb3V0CkxpbnRfMTFoOgoJY2FsbAliaW9zXzExaAoJam1wCUxvdXQKTGludF8xMmg6CgljYWxsCWJpb3NfMTJoCglqbXAJTG91dApMaW50XzEzaDoJCQkJCS8qIEJJT1MgZGlzayBzZXJ2aWNlcyAqLwoJY2FsbAliaW9zXzEzaAoJam1wCUxvdXQKTGludF8xNWg6CQkJCQkvKiBNaXNjLiBCSU9TIHNlcnZpY2VzICovCgljYWxsCWJpb3NfMTVoCglqbXAJTG91dApMaW50XzE2aDoJCQkJCS8qIGtleWJvYXJkIHNlcnZpY2VzICovCgljYWxsCWJpb3NfMTZoCglqbXAJTG91dApMaW50XzFhaDoJCQkJCS8qIFBDSSBiaW9zICovCgljYWxsCWJpb3NfMWFoCglqbXAJTG91dApMb3V0OgoJY21wdwkkMCwgJWF4CglqZQlMaGFuZGVsZWQKCgkvKiBJbnNlcnQgY29kZSBmb3IgdW5oYW5kZWxlZCBJTlRzIGhlcmUuCgkgKgoJICogUk9MTyBwcmludHMgYSBtZXNzYWdlIHRvIHRoZSBjb25zb2xlCgkgKiAod2UgY291bGQgZG8gdGhhdCBidXQgdGhlbiB3ZSdyZSBpbiAxNmJpdCBtb2RlCgkgKiBzbyB3ZSdsbCBoYXZlIHRvIGdldCBiYWNrIGludG8gMzJiaXQgbW9kZQoJICogdG8gdXNlIHRoZSBjb25zb2xlIEkvTyByb3V0aW5lcyAoaWYgd2UgZG8gdGhpcwoJICogd2Ugc2h1bHMgbWFrZSBpbnQgMHgxMCBhbmQgaW50IDB4MTYgd29yayBhcyB3ZWxsKSkKCSAqLwpMaGFuZGVsZWQ6CglSRVNUT1JFX0NBTExFUlNfU1RBQ0sKCWFkZHcJJDIsJXNwCQkJCS8qIGR1bXAgdmVjdG9yIG51bWJlciAqLwoJaXJldAkJCQkJLyogcmV0dXJuIGZyb20gaW50ZXJydXB0ICovCgoKLyoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBCSU9TCWludGVycnVwdCAxMGggLS0gVkdBIHNlcnZpY2VzCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICovCmJpb3NfMTBoOgpncwltb3Z3CU9GRlNfQVgoJWJwKSwgJWF4CglzaHJ3CSQ4LCAlYXgKCWNtcHcJJDB4MywgJWF4CglqZQlMY3VyX3BvcwoJY21wdwkkMHhmLCAlYXgKCWplCUx2aWRfc3RhdGUKCWNtcHcJJDB4MTIsICVheAoJamUJTHZpZF9jZmcKCW1vdncJJDB4ZmZmZiwgJWF4CglyZXQKTGN1cl9wb3M6CQkJCQkvKiBSZWFkIEN1cnNvciBQb3NpdGlvbiBhbmQgU2l6ZSAqLwpncwltb3Z3CSQwLCBPRkZTX0NYKCVicCkKZ3MJbW92dwkkMCwgT0ZGU19EWCglYnApCgl4b3J3CSVheCwgJWF4CglyZXQKTHZpZF9zdGF0ZToJCQkJCS8qIEdldCBWaWRlbyBTdGF0ZSAqLwpncwltb3Z3CSQoODAgPDwgOHwweDAzKSwgT0ZGU19BWCglYnApCS8qIDgwIGNvbHVtbnMsIDgweDI1LCAxNiBjb2xvcnMgKi8KZ3MJbW92dwkkMCwgT0ZGU19CWCglYnApCgl4b3J3CSVheCwgJWF4CglyZXQKTHZpZF9jZmc6CS8qIFZpZGVvIFN1YnN5c3RlbSBDb25maWd1cmF0aW9uIChFR0EvVkdBKSAqLwpncwltb3Z3CSQweDEwLCBPRkZTX0JYKCVicCkJCS8qIGluZGljYXRlIENHQS9NREEvSEdBICovCgl4b3J3CSVheCwgJWF4CglyZXQKCgovKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIEJJT1MgaW50ZXJydXB0IDExaCAtLSBFcXVpcG1lbnQgZGV0ZXJtaW5hdGlvbgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqLwoKYmlvc18xMWg6CmNzCW1vdncJYmlvc19lcXVpcG1lbnQsICVheApncwltb3Z3CSVheCwgT0ZGU19BWCglYnApCgl4b3J3CSVheCwgJWF4CglyZXQKCgovKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIEJJT1MJaW50ZXJydXB0IDEyaCAtLSBHZXQgTWVtb3J5IFNpemUKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKi8KYmlvc18xMmg6CmNzCW1vdncJcmFtX2luXzY0a2JfY2h1bmtzLCAlYXgKCWNtcHcJJDB4YSwgJWF4CglqYQliMTJfbW9yZV90aGFuXzY0MGsKCXNobHcJJDYsICVheAoJam1wCWIxMl9yZXR1cm4KYjEyX21vcmVfdGhhbl82NDBrOgoJbW92dwkkMHgyODAsICVheApiMTJfcmV0dXJuOgpncwltb3Z3CSVheCwgT0ZGU19BWCglYnApCQkvKiByZXR1cm4gbnVtYmVyIG9mIGtpbG9ieXRlcyBpbiBheCAqLwoKZ3MJbW92dwlPRkZTX0ZMQUdTKCVicCksICVheAoJYW5kdwkkMHhmZmZlLCAlYXgJCQkvKiBjbGVhciBjYXJyeSAtLSBmdW5jdGlvbiBzdWNjZWVkZWQgKi8KZ3MJbW92dwklYXgsIE9GRlNfRkxBR1MoJWJwKQoKCXhvcncJJWF4LCAlYXgKCXJldAoKCi8qCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQklPUyBpbnRlcnJ1cHQgMTNoIC0tIERpc2sgc2VydmljZXMKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKi8KYmlvc18xM2g6CmdzCW1vdncJT0ZGU19BWCglYnApLCAlYXgKCXNocncJJDgsICVheAoJY21wdwkkMHgxNSwgJWF4CglqZQlMZnVuY18xNWgKCW1vdncJJDB4ZmZmZiwgJWF4CglyZXQKTGZ1bmNfMTVoOgpncwltb3Z3CU9GRlNfQVgoJWJwKSwgJWF4CglhbmR3CSQweGZmLCAlYXgJCQkvKiByZXR1cm4gQUg9MC0+ZHJpdmUgbm90IHByZXNlbnQgKi8KZ3MJbW92dwklYXgsIE9GRlNfQVgoJWJwKQoJeG9ydwklYXgsICVheAoJcmV0CgoKLyoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIEJJT1MgaW50ZXJydXB0IDE1aCAtLSBNaXNjZWxsYW5lb3VzIHNlcnZpY2VzCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKi8KYmlvc18xNWg6CmdzCW1vdncJT0ZGU19BWCglYnApLCAlYXgKCXNocncJJDgsICVheAoJY21wdwkkMHhjMCwgJWF4CglqZQlMZnVuY19jMGgKCWNtcHcJJDB4ZTgsICVheAoJamUJTGZ1bmNfZThoCgljbXB3CSQweDg4LCAlYXgKCWplCUxmdW5jXzg4aAoJbW92dwkkMHhmZmZmLCAlYXgKCXJldAoKTGZ1bmNfYzBoOgkJCQkJLyogUmV0dXJuIFN5c3RlbSBDb25maWd1cmF0aW9uIFBhcmFtZXRlcnMgKFBTMiBvbmx5KSAqLwpncwltb3Z3CU9GRlNfRkxBR1MoJWJwKSwgJWF4CglvcncJJDEsICVheAkJCQkvKiByZXR1cm4gY2FycnkgLS0gZnVuY3Rpb24gbm90IHN1cHBvcnRlZCAqLwpncwltb3Z3CSVheCwgT0ZGU19GTEFHUyglYnApCgl4b3J3CSVheCwgJWF4CglyZXQKCkxmdW5jX2U4aDoKZ3MJbW92dwlPRkZTX0FYKCVicCksICVheAoJYW5kdwkkMHhmZiwgJWF4CgljbXB3CSQxLCAlYXgKCWplCUxmdW5jX2U4MDFoCmdzCW1vdncJT0ZGU19GTEFHUyglYnApLCAlYXgKCW9ydwkkMSwgJWF4CQkJCS8qIHJldHVybiBjYXJyeSAtLSBmdW5jdGlvbiBub3Qgc3VwcG9ydGVkICovCmdzCW1vdncJJWF4LCBPRkZTX0ZMQUdTKCVicCkKCXhvcncJJWF4LCAlYXgKCXJldAoKTGZ1bmNfZTgwMWg6CQkJCQkvKiBHZXQgbWVtb3J5IHNpemUgZm9yID42NE0gQ29uZmlndXJhdGlvbnMgKi8KY3MJbW92dwlyYW1faW5fNjRrYl9jaHVua3MsICVheAoJY21wdwkkMHgxMDAsICVheAoJamEJZTgwMV9tb3JlX3RoYW5fMTZtYgoJc2hsdwkkNiwgJWF4CQkJCS8qIG11bHRpcGx5IGJ5IDY0ICovCglzdWJ3CSQweDQwMCwgJWF4CQkJLyogMXN0IG1lZyBkb2VzIG5vdCBjb3VudCAqLwoKZ3MJbW92dwklYXgsIE9GRlNfQVgoJWJwKQkJLyogcmV0dXJuIG1lbW9yeSBzaXplIGJldHdlZW4gMU0gYW5kIDE2TSBpbiAxa2IgY2h1bmtzIGluIEFYIGFuZCBDWCAqLwpncwltb3Z3CSVheCwgT0ZGU19DWCglYnApCmdzCW1vdncJJDAsIE9GRlNfQlgoJWJwKQkJLyogc2V0IEJYIGFuZCBEWCB0byAwKi8KZ3MJbW92dwkkMCwgT0ZGU19EWCglYnApCmdzCW1vdncJT0ZGU19GTEFHUyglYnApLCAlYXgKCWFuZHcJJDB4ZmZmZSwgJWF4CQkJLyogY2xlYXIgY2FycnkgLS0gZnVuY3Rpb24gc3VjY2VlZGVkICovCmdzCW1vdncJJWF4LCBPRkZTX0ZMQUdTKCVicCkKCXhvcncJJWF4LCAlYXgKCXJldAoKZTgwMV9tb3JlX3RoYW5fMTZtYjoKCXN1YncJJDB4MTAwLCAlYXgJCQkvKiBzdWJ0cmFjdCAxNk1CICovCgpncwltb3Z3CSQweDNjMDAsIE9GRlNfQVgoJWJwKQkJLyogcmV0dXJuIDB4M2MwMCAoMTZNQi0xTUIpIGluIEFYIGFuZCBDWCAqLwpncwltb3Z3CSQweDNjMDAsIE9GRlNfQ1goJWJwKQpncwltb3Z3CSVheCwgT0ZGU19CWCglYnApCQkvKiBzZXQgQlggYW5kIERYIHRvIG51bWJlciBvZiA2NGtiIGNodW5rcyBhYm92ZSAxNk1CICovCmdzCW1vdncJJWF4LCBPRkZTX0RYKCVicCkKCmdzCW1vdncJT0ZGU19GTEFHUyglYnApLCAlYXgKCWFuZHcJJDB4ZmZmZSwgJWF4CQkJLyogY2xlYXIgY2FycnkgLS0gZnVuY3Rpb24gc3VjY2VlZGVkICovCmdzCW1vdncJJWF4LCBPRkZTX0ZMQUdTKCVicCkKCXhvcncJJWF4LCAlYXgKCXJldAoKTGZ1bmNfODhoOgpjcwltb3Z3CXJhbV9pbl82NGtiX2NodW5rcywgJWF4CgljbXB3CSQweDEwMCwgJWF4CglqbmEJYjg4X25vdF9tb3JlX3RoYW4xNgoJbW92dwkkMHgxMDAsICVheApiODhfbm90X21vcmVfdGhhbjE2OgoJc2hsdwkkNiwgJWF4CglzdWJ3CSQweDQwMCwgJWF4CQkJLyogMXN0IG1lZyBkb2VzIG5vdCBjb3VudCAqLwoKZ3MJbW92dwklYXgsIE9GRlNfQVgoJWJwKQkJLyogcmV0dXJuIG51bWJlciBvZiBraWxvYnl0ZXMgYmV0d2VlbiAxNk1CIGFuZCAxNk1CIGluIGF4ICovCgpncwltb3Z3CU9GRlNfRkxBR1MoJWJwKSwgJWF4CglhbmR3CSQweGZmZmUsICVheAkJCS8qIGNsZWFyIGNhcnJ5IC0tIGZ1bmN0aW9uIHN1Y2NlZWRlZCAqLwpncwltb3Z3CSVheCwgT0ZGU19GTEFHUyglYnApCgoJeG9ydwklYXgsICVheAoJcmV0CgoKLyoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBCSU9TIGludGVycnVwdCAxNmggLS0ga2V5Ym9hcmQgc2VydmljZXMKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKi8KYmlvc18xNmg6CmdzCW1vdncJT0ZGU19BWCglYnApLCAlYXgKCXNocncJJDgsICVheAoJY21wdwkkMHgwMywgJWF4CglqZQlMZnVuY18wM2gKCW1vdncJJDB4ZmZmZiwgJWF4CglyZXQKTGZ1bmNfMDNoOgoJeG9ydwklYXgsICVheAkJCS8qIGRvIG5vdGhpbmcgLS0gZnVuY3Rpb24gbm90IHN1cHBvcnRlZCAqLwoJcmV0CgovKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIEJJT1MgaW50ZXJydXB0IDFhaCAtLSBQQ0kgYmlvcwogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqLwpiaW9zXzFhaDoKZ3MJbW92dwlPRkZTX0FYKCVicCksICVheAoJY21wYgkkMHhiMSwgJWFoCglqZQlMZnVuY19iMWgKCW1vdncJJDB4ZmZmZiwgJWF4CglyZXQKTGZ1bmNfYjFoOgoJY2FsbAlyZWFsbW9kZV9wY2lfYmlvcwoJeG9ydwklYXgsICVheAkJCS8qIGRvIG5vdGhpbmcgLS0gZnVuY3Rpb24gbm90IHN1cHBvcnRlZCAqLwoJcmV0CgoKLmdsb2JsIHJhbV9pbl82NGtiX2NodW5rcwouaGlkZGVuIHJhbV9pbl82NGtiX2NodW5rcwoudHlwZSByYW1faW5fNjRrYl9jaHVua3MsIEBmdW5jdGlvbgpyYW1faW5fNjRrYl9jaHVua3M6Cgkud29yZAkwCgouZ2xvYmwgYmlvc19lcXVpcG1lbnQKLmhpZGRlbiBiaW9zX2VxdWlwbWVudAoudHlwZSBiaW9zX2VxdWlwbWVudCwgQGZ1bmN0aW9uCmJpb3NfZXF1aXBtZW50OgoJLndvcmQJMAo=