IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMKIyBNaWNyby1WTSBBbGxvY2F0b3IKIyBieSBDaGFybGVzIENs6W1lbnQsIGNvcnJlY3RlZCBieSBHYetsIFRob21hcy4KIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCgpJIE1lbW9yeSBsYXlvdXQKICAxIEV4cG9uYW50aWFsIGFyZWEKICAyIExpbmVhciBhcmVhCiAgMyBNbWFwIGFyZWEKSUkgU3RydWN0dXJlCiAgMSBSZWZlcmVuY2luZyBtZW1vcnkgY2h1bmtzCiAgMiBIYXJzaCB0YWJsZXMKSUlJIEludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50CgpJIE1lbW9yeSBsYXlvdXQKIy0tLS0tLS0tLS0tLS0tCgpCYXNlZCBvbiB0aGUgc2l6ZSBvZiB0aGUgb2JqZWN0cyB0byBhbGxvY2F0ZSwgdGhlIGFsbG9jYXRvciBjaG9vc2VzIGJldHdlZW4KdGhyZWUgZGlzdGluY3RzIGFyZWEuCmkpIFRoZSBleHBvbmFudGlhbCBhcmVhIGZvciBvYmplY3RzIGxlc3MgdGhhbiBtYXhfZXhwIGJ5dGVzCmlpKSBUaGUgbGluZWFyIGFyZWEgZm9yIHggaW4gbWF4X2V4cCA8IHggPCBtYXhfbGluIGJ5dGVzCmlpaSkgVGhlIG1tYXAgYXJlYSBmb3IgTElOIGJ5dGVzIDwgeAoKTWF4X2V4cCBhbmQgbWF4X2xpbiBhcmUgYWN0dWFsbHkgZGVmaW5lZCB0byAzMiBhbmQgODE5MiBieXRlcy4KCkkuMSBFeHBvbmFudGlhbCBhcmVhOgpPYmplY3RzIHN0b3JlZCBpbiB0aGF0IGFyZWEgYXJlIGFsbG9jYXRlZCAyXm4gYnl0ZXMsIHRoZSBzbWFsbGVzdCBwb3dlciBvZiB0d28KaW4gd2hpY2ggdGhlIG9iamVjdCBjYW4gZml0LgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQp8IFNpemUgdG8gYWxsb2NhdGUgfCByZXNlcnZlZCBzcGFjZSB8Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEgICAgICAgICAgICAgICAgICAyCiAyICAgICAgICAgICAgICAgICAgMgogMyAgICAgICAgICAgICAgICAgIDQKIDQgICAgICAgICAgICAgICAgICA0CiB7NSw2LDcsOH0gICAgICAgICAgOAogezktMTZ9ICAgICAgICAgICAgIDE2CiB7MTctMzJ9ICAgICAgICAgICAgMzIKCi0+IFNpemUgb2YgYWxsb2NhdGVkIGNodW5rIGluIHRoaXMgYXJlYSBncm93cyBleHBvbmFudGlhbGx5LgpXaXRoIG1heF9leHAgPSAzMiBieXRlcwoKSS4yIExpbmVhciBhcmVhOgpJbiB0aGUgbGluZWFyIGFyZWEsIHRoZSBzaXplIG5lZWRlZCB0byBiZSBhbGxvY2F0ZWQgaXMgcm91bmRlZCB0byB0aGUgbmV4dAptYXhfZXhwIG11bHRpcGxlLiBUaGlzIGlzIHRvIHJlZHVjZSBtZW1vcnkgbG9zcywgYXMgb3RoZXJ3aXNlLCB3aXRoIHRoZQpwcmV2aW91cyB0ZWNobmlxdWUgYWxsb2NhdGluZyAyNjAgYnl0ZXMgd291bGQgaW5kdWNlIHRvIG9jY3VweSBhIDUxMiBieXRlcwphcmVhLgoKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgfCAgMzIgIHwgICA2NCAgIHwgIDk2ICB8ICAxMjggIHwgIC4uLgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCm1heF9leHAqMSAgICAqMiAgICAgICozICAgICAgKjQKCi0+IFNpemUgb2YgYWxsb2NhdGVkIGNodW5rIGluIHRoaXMgYXJlYSBncm93cyBsaW5lYXJseS4KCkkuMyBNbWFwIGFyZWE6CkZvciBvYmplY3RzIGxhcmdlciB0aGFuIDJeMTMgKDgxOTIpIGJ5dGVzLCBhIG51bWJlciBvZiBwaHlzaWNhbCBwYWdlIGlzCmFzc29jaWF0ZWQsIHRodXMgYSBtdWx0aXBsaWVyIG9mIDQwOTYgYnl0ZXMuCgoKSUkgRGVzY3JpcHRvcnMKIy0tLS0tLS0tLS0tLS0KCklJLjEgSGFzaCB0YWJsZXM6CgpJbiBvcmRlciB0byBrZWVwIHRyYWNrIG9mIGFsbG9jYXRlZCBtZW1vcnkgYWRyZXNzZXMsIHdlIG5lZWQgdG8gc3RvcmUgdGhlCmFkcmVzc2VzIHRoYXQgd2UgYWxsb2NhdGVkLiBUaGlzIGlzIGEgcmVxdWlyZW1lbnQgZm9yIHRoZSBnYXJiYWdlIGNvbGxlY3RvciwgYXMKdGhlIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgQyBBQkkgaW1wbGllcyB0aGF0IGEgbWVtb3J5IHJlZmVyZW5jZSBpcwppbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIGEgdmFsdWUuIEhlbmNlLCBldmVyeSBwYWdlIGRlc2NyaXB0b3IgaXMgaW5zZXJ0ZWQgaW4gYQpoYXNoIHRhYmxlIHdoZW4gYWxsb2NhdGVkLgpUaGlzIGhhcyBhIGxpbWl0YXRpb24sIGFzIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBtYWtlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYQp2YWx1ZSBpbiB0aGUgaGVhcCB0aGF0IHdvdWxkIHBvaW50IHRvIGFuIGFjdHVhbCBhbGxvY2F0ZWQgc3BhY2UgaW4gbWVtb3J5IGlmCnRyYW5zbGF0ZWQgaW50byBhIHBvaW50ZXIuCgoKSUkuMiBSZWZlcmVuY2luZyBtZW1vcnkgY2h1bmtzOgpIZXJlIGlzIHRoZSByZXByZXNlbnRhdGlvbiBvZiBhbiBhZHJlc3MgaW4gbWVtb3J5IDoKCiAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClBvaW50ZXI6IHwgICAgVGFibGUgRW50cnkgICAgIHwgIFBhZ2UgRGVzY3JpcHRvciAgfCAgICAgICBJbmRleCAgICAgfAogICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgfCAgICAgX18gICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAgICAgfCAgICB8ICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAgICAgfCAgICB8X198ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAgICAgfCAgICB8ICB8ICAgIEdDSGFzaFNldCAgICAgXHwvICAgICAgICAgICAgICAgICAgfAogICAgICAgICAgICAgfCAgICB8X198ICAgICAgIF9fIF9fIF9fIF9fIF9fIF9fICAgICAgICAgICAgICAgfAogICAgICAgICAgICAgIC0tLT58ICB8LS0tLS0+fF9ffF9ffF9ffF9ffF9ffF9ffCAgICAgICAgICAgICAgfAogICAgICAgICAgICAgICAgICB8X198ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfAogICAgICAgICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICB8ICAgIEdDUGFnZSAgICAgICBcfC8KICAgICAgICAgICAgICAgICAgfF9ffCAgICAgICAgICAgICAgICAgICAgfCAgICAgIF9fIF9fIF9fIF9fIF9fIF9fCiAgICAgICAgICAgR0NIYXNoICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tPnxfX3xfX3xfX3xfX3xfX3xfX3wgSGVhZGVycwoKCk1lbW9yeSBpcyBzZXBhcmF0ZWQgaW4gc3BhY2VzLiBFYWNoIHNwYWNlIGNvbnRhaW5zIG1lbW9yeSBjaHVuayBvZiB0aGUgc2FtZQpzaXplLiBXaGVuIHRoZSBhbGxvY2F0b3IgbmVlZHMgdG8gYWxsb2NhdGUgbiBieXRlcywgaXQgY2hvb3NlIGEgbWVtb3J5IHNwYWNlCmluIGFuIGV4cG9uZW50aWFsLCBsaW5lYXIgb3IgbW1hcGVkIHNwYWNlIGFuZCByb3VuZCBuIHRvIHRoZSBzaXplIG9mIHRoaXMKc3BhY2UuIFRoaXMgdGVjaG5pcXVlIGlzIHVzZWQgdG8gY29uc3RydWN0IGEgcGVyZm9ybWFudCBoYXNodGFibGUgb2YgYWxsCmFsbG9jYXRlZCBtZW1vcnkgY2h1bmtzLCB3aGljaCBpcyB1c2VkIHRvIGlkZW50aWZ5IHBvaW50ZXIgZHVyaW5nIGEgY29sbGVjdGlvbgoodGhlIGdhcmJhZ2UgY29sbGVjdG9yIGlzIG9ubHkgY29uc2VydmF0aXZlKS4KClRoZSBmaXJzdCBiaXRzIG9mIGEgbWVtb3J5IGNodW5rIHBvaW50ZXIgcmVmZXJlbmNlIGFuIGVudHJ5IGluIEdDSGFzaCwgYW5kCnRoZSBuZXh0IGJpdHMgcmVmZXJlbmNlIGFuIGVudHJ5IGluIEdDSGFzaFNldC4gRWFjaCBlbnRyeSBpbiBHQ0hhc2hTZXQgaXMgYQpHQ1BhZ2Ugc3RydWN0dXJlLCB3aGljaCBkZXNjcmliZXMgYSBzZXQgb2YgY29udGlndW91cyBwYWdlcyAoYSBtZW1vcnkgc3BhY2UpLgoKVGhlIEdDUGFnZSBDbGFzcyBob2xkcyBhIGZpZWxkIChHQ0NodW5rTm9kZSopX2hlYWRlcnMgY29udGFpbmluZyB0aGUgbGlzdCB0bwphbGwgaGVhZGVycyBvZiBmcmVlIGNodW5rcyBvZiB0aGUgc3BhY2UuIEl0IGFsc28gaG9sZHMgdGhlIHNpemUgb2YgdGhlIHNwYWNlCmluIF9jaHVua19uYmIuIFRoaXMgc2l6ZSBpcyB0aGUgcm91bmRlZCBzaXplIChleHAgb3IgbGluZWFyKSBvZiBhbGwgbWVtb3J5CmNodW5rcyBtYW5hZ2VkIGluIHRoaXMgc3BhY2UuCgpfTm90ZV86ClRoaXMgaXMgbm90IHRoZSBjYXNlIGZvciBzcGFjZSBhbGxvY2F0ZWQgaW4gdGhlIG1tYXAgYXJlYSwgd2hvc2UgcGFnZQpkZXNjcmlwdG9yIGhvbGRzIGRpcmVjdGx5IHRoZSBoZWFkZXIgaXRzZWxmLgoKQSBoZWFkZXIgaXMgZGVzY3JpYmVkIGJ5IHRoZSBjbGFzcyBHQ0NodW5rTm9kZS4gSXQgaG9sZHMgdGhlIHNpemUgX25iYl9tYXJrIG9mCm1lbW9yeSBjaHVua3MgaW4gdGhlIGxhc3QgMjkgYml0cyAodGhlIDMgbGFzdCBvbmVzIGFyZSB1c2VkIGJ5IHRoZSBnYXJiYWdlCmNvbGxlY3RvciB0byBzZXQgdGhlICpjb2xvciogb2YgdGhlIGNodW5rKS4gR0NDaHVua05vZGUgYXJlIHN0b3JlZCBpbiBhCmNpcmN1bGFyIGRvdWJsZSBsaW5rZWQgbGlzdC4KCgpJSUkgSW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGUgYWxsb2NhdG9yIGhhcyB0byBhbGxvY2F0ZSBpdHMgbWVtbW9yeSBzdHJ1Y3R1cmVzIGl0c2VsZi4gSXQgaXMgcmVzcG9uc2libGUKdG8gYWxsb2NhdGUgdGhlIG1lbW9yeSBmb3IgdGhlIG1pY3JvLXZtIGFuZCB0aGUgc3RydWN0dXJlcyBuZWVkZWQgdG8gbWFuYWdlCmFuZCBhY2Nlc3MgdGhlIGFsbG9jYXRlZCBhcmVhcy4K