60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c90816200004a91906200057c565b506000600d556105dc600e556001600f556000601060006101000a81548160ff0219169083151502179055503480156200008357600080fd5b506040518060400160405280601081526020017f41786f6c6f746c2042756e6368696573000000000000000000000000000000008152506040518060400160405280600381526020017f4e4654000000000000000000000000000000000000000000000000000000000081525081600090816200010191906200057c565b5080600190816200011391906200057c565b505050620001366200012a6200016660201b60201c565b6200016e60201b60201c565b6200016060405180608001604052806053815260200162004d0a605391396200023460201b60201c565b620006e6565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002446200016660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200026a620002d860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002c3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002ba90620006c4565b60405180910390fd5b80600b9081620002d491906200057c565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200038457607f821691505b6020821081036200039a57620003996200033c565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004047fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620003c5565b620004108683620003c5565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200045d62000457620004518462000428565b62000432565b62000428565b9050919050565b6000819050919050565b62000479836200043c565b62000491620004888262000464565b848454620003d2565b825550505050565b600090565b620004a862000499565b620004b58184846200046e565b505050565b5b81811015620004dd57620004d16000826200049e565b600181019050620004bb565b5050565b601f8211156200052c57620004f681620003a0565b6200050184620003b5565b8101602085101562000511578190505b620005296200052085620003b5565b830182620004ba565b50505b505050565b600082821c905092915050565b6000620005516000198460080262000531565b1980831691505092915050565b60006200056c83836200053e565b9150826002028217905092915050565b620005878262000302565b67ffffffffffffffff811115620005a357620005a26200030d565b5b620005af82546200036b565b620005bc828285620004e1565b600060209050601f831160018114620005f45760008415620005df578287015190505b620005eb85826200055e565b8655506200065b565b601f1984166200060486620003a0565b60005b828110156200062e5784890151825560018201915060208501945060208101905062000607565b868310156200064e57848901516200064a601f8916826200053e565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620006ac60208362000663565b9150620006b98262000674565b602082019050919050565b60006020820190508181036000830152620006df816200069d565b9050919050565b61461480620006f66000396000f3fe60806040526004361061020f5760003560e01c806355f804b311610118578063a22cb465116100a0578063d5abeb011161006f578063d5abeb011461077f578063d936547e146107aa578063da3ef23f146107e7578063e985e9c514610810578063f2fde38b1461084d5761020f565b8063a22cb465146106c5578063b88d4fde146106ee578063c668286214610717578063c87b56dd146107425761020f565b806370a08231116100e757806370a08231146105f2578063715018a61461062f5780637f00c7a6146106465780638da5cb5b1461066f57806395d89b411461069a5761020f565b806355f804b3146105365780635c975abb1461055f5780636352211e1461058a5780636c0360eb146105c75761020f565b80632f745c591161019b57806342842e0e1161016a57806342842e0e14610441578063438b63001461046a57806344a0d68a146104a75780634a4c560d146104d05780634f6ccce7146104f95761020f565b80632f745c59146103b557806330cc7ae0146103f25780633ccfd60b1461041b57806340c10f19146104255761020f565b8063095ea7b3116101e2578063095ea7b3146102e257806313faede61461030b57806318160ddd14610336578063239c70ae1461036157806323b872dd1461038c5761020f565b806301ffc9a71461021457806302329a291461025157806306fdde031461027a578063081812fc146102a5575b600080fd5b34801561022057600080fd5b5061023b60048036038101906102369190612da3565b610876565b6040516102489190612deb565b60405180910390f35b34801561025d57600080fd5b5061027860048036038101906102739190612e32565b6108f0565b005b34801561028657600080fd5b5061028f610989565b60405161029c9190612ef8565b60405180910390f35b3480156102b157600080fd5b506102cc60048036038101906102c79190612f50565b610a1b565b6040516102d99190612fbe565b60405180910390f35b3480156102ee57600080fd5b5061030960048036038101906103049190613005565b610aa0565b005b34801561031757600080fd5b50610320610bb7565b60405161032d9190613054565b60405180910390f35b34801561034257600080fd5b5061034b610bbd565b6040516103589190613054565b60405180910390f35b34801561036d57600080fd5b50610376610bca565b6040516103839190613054565b60405180910390f35b34801561039857600080fd5b506103b360048036038101906103ae919061306f565b610bd0565b005b3480156103c157600080fd5b506103dc60048036038101906103d79190613005565b610c30565b6040516103e99190613054565b60405180910390f35b3480156103fe57600080fd5b50610419600480360381019061041491906130c2565b610cd5565b005b610423610dac565b005b61043f600480360381019061043a9190613005565b610ea8565b005b34801561044d57600080fd5b506104686004803603810190610463919061306f565b610fee565b005b34801561047657600080fd5b50610491600480360381019061048c91906130c2565b61100e565b60405161049e91906131ad565b60405180910390f35b3480156104b357600080fd5b506104ce60048036038101906104c99190612f50565b6110bc565b005b3480156104dc57600080fd5b506104f760048036038101906104f291906130c2565b611142565b005b34801561050557600080fd5b50610520600480360381019061051b9190612f50565b611219565b60405161052d9190613054565b60405180910390f35b34801561054257600080fd5b5061055d60048036038101906105589190613304565b61128a565b005b34801561056b57600080fd5b50610574611319565b6040516105819190612deb565b60405180910390f35b34801561059657600080fd5b506105b160048036038101906105ac9190612f50565b61132c565b6040516105be9190612fbe565b60405180910390f35b3480156105d357600080fd5b506105dc6113dd565b6040516105e99190612ef8565b60405180910390f35b3480156105fe57600080fd5b50610619600480360381019061061491906130c2565b61146b565b6040516106269190613054565b60405180910390f35b34801561063b57600080fd5b50610644611522565b005b34801561065257600080fd5b5061066d60048036038101906106689190612f50565b6115aa565b005b34801561067b57600080fd5b50610684611630565b6040516106919190612fbe565b60405180910390f35b3480156106a657600080fd5b506106af61165a565b6040516106bc9190612ef8565b60405180910390f35b3480156106d157600080fd5b506106ec60048036038101906106e7919061334d565b6116ec565b005b3480156106fa57600080fd5b506107156004803603810190610710919061342e565b611702565b005b34801561072357600080fd5b5061072c611764565b6040516107399190612ef8565b60405180910390f35b34801561074e57600080fd5b5061076960048036038101906107649190612f50565b6117f2565b6040516107769190612ef8565b60405180910390f35b34801561078b57600080fd5b5061079461189c565b6040516107a19190613054565b60405180910390f35b3480156107b657600080fd5b506107d160048036038101906107cc91906130c2565b6118a2565b6040516107de9190612deb565b60405180910390f35b3480156107f357600080fd5b5061080e60048036038101906108099190613304565b6118c2565b005b34801561081c57600080fd5b50610837600480360381019061083291906134b1565b611951565b6040516108449190612deb565b60405180910390f35b34801561085957600080fd5b50610874600480360381019061086f91906130c2565b6119e5565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108e957506108e882611adc565b5b9050919050565b6108f8611bbe565b73ffffffffffffffffffffffffffffffffffffffff16610916611630565b73ffffffffffffffffffffffffffffffffffffffff161461096c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109639061353d565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b6060600080546109989061358c565b80601f01602080910402602001604051908101604052809291908181526020018280546109c49061358c565b8015610a115780601f106109e657610100808354040283529160200191610a11565b820191906000526020600020905b8154815290600101906020018083116109f457829003601f168201915b5050505050905090565b6000610a2682611bc6565b610a65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5c9061362f565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610aab8261132c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b12906136c1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b3a611bbe565b73ffffffffffffffffffffffffffffffffffffffff161480610b695750610b6881610b63611bbe565b611951565b5b610ba8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9f90613753565b60405180910390fd5b610bb28383611c32565b505050565b600d5481565b6000600880549050905090565b600f5481565b610be1610bdb611bbe565b82611ceb565b610c20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c17906137e5565b60405180910390fd5b610c2b838383611dc9565b505050565b6000610c3b8361146b565b8210610c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7390613877565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610cdd611bbe565b73ffffffffffffffffffffffffffffffffffffffff16610cfb611630565b73ffffffffffffffffffffffffffffffffffffffff1614610d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d489061353d565b60405180910390fd5b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610db4611bbe565b73ffffffffffffffffffffffffffffffffffffffff16610dd2611630565b73ffffffffffffffffffffffffffffffffffffffff1614610e28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1f9061353d565b60405180910390fd5b6000610e32611630565b73ffffffffffffffffffffffffffffffffffffffff1647604051610e55906138c8565b60006040518083038185875af1925050503d8060008114610e92576040519150601f19603f3d011682016040523d82523d6000602084013e610e97565b606091505b5050905080610ea557600080fd5b50565b6000610eb2610bbd565b9050601060009054906101000a900460ff1615610ece57600080fd5b60008211610edb57600080fd5b600f54821115610eea57600080fd5b600e548282610ef9919061390c565b1115610f0457600080fd5b610f0c611630565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fb25760011515601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610fb15781600d54610fa49190613962565b341015610fb057600080fd5b5b5b6000600190505b828111610fe857610fd5848284610fd0919061390c565b61202f565b8080610fe0906139bc565b915050610fb9565b50505050565b61100983838360405180602001604052806000815250611702565b505050565b6060600061101b8361146b565b905060008167ffffffffffffffff811115611039576110386131d9565b5b6040519080825280602002602001820160405280156110675781602001602082028036833780820191505090505b50905060005b828110156110b15761107f8582610c30565b82828151811061109257611091613a04565b5b60200260200101818152505080806110a9906139bc565b91505061106d565b508092505050919050565b6110c4611bbe565b73ffffffffffffffffffffffffffffffffffffffff166110e2611630565b73ffffffffffffffffffffffffffffffffffffffff1614611138576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112f9061353d565b60405180910390fd5b80600d8190555050565b61114a611bbe565b73ffffffffffffffffffffffffffffffffffffffff16611168611630565b73ffffffffffffffffffffffffffffffffffffffff16146111be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b59061353d565b60405180910390fd5b6001601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000611223610bbd565b8210611264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125b90613aa5565b60405180910390fd5b6008828154811061127857611277613a04565b5b90600052602060002001549050919050565b611292611bbe565b73ffffffffffffffffffffffffffffffffffffffff166112b0611630565b73ffffffffffffffffffffffffffffffffffffffff1614611306576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fd9061353d565b60405180910390fd5b80600b90816113159190613c71565b5050565b601060009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036113d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cb90613db5565b60405180910390fd5b80915050919050565b600b80546113ea9061358c565b80601f01602080910402602001604051908101604052809291908181526020018280546114169061358c565b80156114635780601f1061143857610100808354040283529160200191611463565b820191906000526020600020905b81548152906001019060200180831161144657829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d290613e47565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61152a611bbe565b73ffffffffffffffffffffffffffffffffffffffff16611548611630565b73ffffffffffffffffffffffffffffffffffffffff161461159e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115959061353d565b60405180910390fd5b6115a8600061204d565b565b6115b2611bbe565b73ffffffffffffffffffffffffffffffffffffffff166115d0611630565b73ffffffffffffffffffffffffffffffffffffffff1614611626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161d9061353d565b60405180910390fd5b80600f8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546116699061358c565b80601f01602080910402602001604051908101604052809291908181526020018280546116959061358c565b80156116e25780601f106116b7576101008083540402835291602001916116e2565b820191906000526020600020905b8154815290600101906020018083116116c557829003601f168201915b5050505050905090565b6116fe6116f7611bbe565b8383612113565b5050565b61171361170d611bbe565b83611ceb565b611752576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611749906137e5565b60405180910390fd5b61175e8484848461227f565b50505050565b600c80546117719061358c565b80601f016020809104026020016040519081016040528092919081815260200182805461179d9061358c565b80156117ea5780601f106117bf576101008083540402835291602001916117ea565b820191906000526020600020905b8154815290600101906020018083116117cd57829003601f168201915b505050505081565b60606117fd82611bc6565b61183c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183390613ed9565b60405180910390fd5b60006118466122db565b905060008151116118665760405180602001604052806000815250611894565b806118708461236d565b600c60405160200161188493929190613fb8565b6040516020818303038152906040525b915050919050565b600e5481565b60116020528060005260406000206000915054906101000a900460ff1681565b6118ca611bbe565b73ffffffffffffffffffffffffffffffffffffffff166118e8611630565b73ffffffffffffffffffffffffffffffffffffffff161461193e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119359061353d565b60405180910390fd5b80600c908161194d9190613c71565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6119ed611bbe565b73ffffffffffffffffffffffffffffffffffffffff16611a0b611630565b73ffffffffffffffffffffffffffffffffffffffff1614611a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a589061353d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac79061405b565b60405180910390fd5b611ad98161204d565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611ba757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611bb75750611bb6826124cd565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611ca58361132c565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611cf682611bc6565b611d35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2c906140ed565b60405180910390fd5b6000611d408361132c565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611daf57508373ffffffffffffffffffffffffffffffffffffffff16611d9784610a1b565b73ffffffffffffffffffffffffffffffffffffffff16145b80611dc05750611dbf8185611951565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611de98261132c565b73ffffffffffffffffffffffffffffffffffffffff1614611e3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e369061417f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611eae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea590614211565b60405180910390fd5b611eb9838383612537565b611ec4600082611c32565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f149190614231565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f6b919061390c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461202a838383612649565b505050565b61204982826040518060200160405280600081525061264e565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612181576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612178906142b1565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516122729190612deb565b60405180910390a3505050565b61228a848484611dc9565b612296848484846126a9565b6122d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cc90614343565b60405180910390fd5b50505050565b6060600b80546122ea9061358c565b80601f01602080910402602001604051908101604052809291908181526020018280546123169061358c565b80156123635780601f1061233857610100808354040283529160200191612363565b820191906000526020600020905b81548152906001019060200180831161234657829003601f168201915b5050505050905090565b6060600082036123b4576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506124c8565b600082905060005b600082146123e65780806123cf906139bc565b915050600a826123df9190614392565b91506123bc565b60008167ffffffffffffffff811115612402576124016131d9565b5b6040519080825280601f01601f1916602001820160405280156124345781602001600182028036833780820191505090505b5090505b600085146124c15760018261244d9190614231565b9150600a8561245c91906143c3565b6030612468919061390c565b60f81b81838151811061247e5761247d613a04565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856124ba9190614392565b9450612438565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612542838383612830565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125845761257f81612835565b6125c3565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146125c2576125c1838261287e565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361260557612600816129eb565b612644565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612643576126428282612abc565b5b5b505050565b505050565b6126588383612b3b565b61266560008484846126a9565b6126a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269b90614343565b60405180910390fd5b505050565b60006126ca8473ffffffffffffffffffffffffffffffffffffffff16612d14565b15612823578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026126f3611bbe565b8786866040518563ffffffff1660e01b81526004016127159493929190614449565b6020604051808303816000875af192505050801561275157506040513d601f19601f8201168201806040525081019061274e91906144aa565b60015b6127d3573d8060008114612781576040519150601f19603f3d011682016040523d82523d6000602084013e612786565b606091505b5060008151036127cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c290614343565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612828565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161288b8461146b565b6128959190614231565b905060006007600084815260200190815260200160002054905081811461297a576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506129ff9190614231565b9050600060096000848152602001908152602001600020549050600060088381548110612a2f57612a2e613a04565b5b906000526020600020015490508060088381548110612a5157612a50613a04565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612aa057612a9f6144d7565b5b6001900381819060005260206000200160009055905550505050565b6000612ac78361146b565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612baa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ba190614552565b60405180910390fd5b612bb381611bc6565b15612bf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bea906145be565b60405180910390fd5b612bff60008383612537565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c4f919061390c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612d1060008383612649565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612d8081612d4b565b8114612d8b57600080fd5b50565b600081359050612d9d81612d77565b92915050565b600060208284031215612db957612db8612d41565b5b6000612dc784828501612d8e565b91505092915050565b60008115159050919050565b612de581612dd0565b82525050565b6000602082019050612e006000830184612ddc565b92915050565b612e0f81612dd0565b8114612e1a57600080fd5b50565b600081359050612e2c81612e06565b92915050565b600060208284031215612e4857612e47612d41565b5b6000612e5684828501612e1d565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612e99578082015181840152602081019050612e7e565b83811115612ea8576000848401525b50505050565b6000601f19601f8301169050919050565b6000612eca82612e5f565b612ed48185612e6a565b9350612ee4818560208601612e7b565b612eed81612eae565b840191505092915050565b60006020820190508181036000830152612f128184612ebf565b905092915050565b6000819050919050565b612f2d81612f1a565b8114612f3857600080fd5b50565b600081359050612f4a81612f24565b92915050565b600060208284031215612f6657612f65612d41565b5b6000612f7484828501612f3b565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612fa882612f7d565b9050919050565b612fb881612f9d565b82525050565b6000602082019050612fd36000830184612faf565b92915050565b612fe281612f9d565b8114612fed57600080fd5b50565b600081359050612fff81612fd9565b92915050565b6000806040838503121561301c5761301b612d41565b5b600061302a85828601612ff0565b925050602061303b85828601612f3b565b9150509250929050565b61304e81612f1a565b82525050565b60006020820190506130696000830184613045565b92915050565b60008060006060848603121561308857613087612d41565b5b600061309686828701612ff0565b93505060206130a786828701612ff0565b92505060406130b886828701612f3b565b9150509250925092565b6000602082840312156130d8576130d7612d41565b5b60006130e684828501612ff0565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61312481612f1a565b82525050565b6000613136838361311b565b60208301905092915050565b6000602082019050919050565b600061315a826130ef565b61316481856130fa565b935061316f8361310b565b8060005b838110156131a0578151613187888261312a565b975061319283613142565b925050600181019050613173565b5085935050505092915050565b600060208201905081810360008301526131c7818461314f565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61321182612eae565b810181811067ffffffffffffffff821117156132305761322f6131d9565b5b80604052505050565b6000613243612d37565b905061324f8282613208565b919050565b600067ffffffffffffffff82111561326f5761326e6131d9565b5b61327882612eae565b9050602081019050919050565b82818337600083830152505050565b60006132a76132a284613254565b613239565b9050828152602081018484840111156132c3576132c26131d4565b5b6132ce848285613285565b509392505050565b600082601f8301126132eb576132ea6131cf565b5b81356132fb848260208601613294565b91505092915050565b60006020828403121561331a57613319612d41565b5b600082013567ffffffffffffffff81111561333857613337612d46565b5b613344848285016132d6565b91505092915050565b6000806040838503121561336457613363612d41565b5b600061337285828601612ff0565b925050602061338385828601612e1d565b9150509250929050565b600067ffffffffffffffff8211156133a8576133a76131d9565b5b6133b182612eae565b9050602081019050919050565b60006133d16133cc8461338d565b613239565b9050828152602081018484840111156133ed576133ec6131d4565b5b6133f8848285613285565b509392505050565b600082601f830112613415576134146131cf565b5b81356134258482602086016133be565b91505092915050565b6000806000806080858703121561344857613447612d41565b5b600061345687828801612ff0565b945050602061346787828801612ff0565b935050604061347887828801612f3b565b925050606085013567ffffffffffffffff81111561349957613498612d46565b5b6134a587828801613400565b91505092959194509250565b600080604083850312156134c8576134c7612d41565b5b60006134d685828601612ff0565b92505060206134e785828601612ff0565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613527602083612e6a565b9150613532826134f1565b602082019050919050565b600060208201905081810360008301526135568161351a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806135a457607f821691505b6020821081036135b7576135b661355d565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613619602c83612e6a565b9150613624826135bd565b604082019050919050565b600060208201905081810360008301526136488161360c565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006136ab602183612e6a565b91506136b68261364f565b604082019050919050565b600060208201905081810360008301526136da8161369e565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061373d603883612e6a565b9150613748826136e1565b604082019050919050565b6000602082019050818103600083015261376c81613730565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006137cf603183612e6a565b91506137da82613773565b604082019050919050565b600060208201905081810360008301526137fe816137c2565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613861602b83612e6a565b915061386c82613805565b604082019050919050565b6000602082019050818103600083015261389081613854565b9050919050565b600081905092915050565b50565b60006138b2600083613897565b91506138bd826138a2565b600082019050919050565b60006138d3826138a5565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061391782612f1a565b915061392283612f1a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613957576139566138dd565b5b828201905092915050565b600061396d82612f1a565b915061397883612f1a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156139b1576139b06138dd565b5b828202905092915050565b60006139c782612f1a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036139f9576139f86138dd565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000613a8f602c83612e6a565b9150613a9a82613a33565b604082019050919050565b60006020820190508181036000830152613abe81613a82565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613b277fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613aea565b613b318683613aea565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613b6e613b69613b6484612f1a565b613b49565b612f1a565b9050919050565b6000819050919050565b613b8883613b53565b613b9c613b9482613b75565b848454613af7565b825550505050565b600090565b613bb1613ba4565b613bbc818484613b7f565b505050565b5b81811015613be057613bd5600082613ba9565b600181019050613bc2565b5050565b601f821115613c2557613bf681613ac5565b613bff84613ada565b81016020851015613c0e578190505b613c22613c1a85613ada565b830182613bc1565b50505b505050565b600082821c905092915050565b6000613c4860001984600802613c2a565b1980831691505092915050565b6000613c618383613c37565b9150826002028217905092915050565b613c7a82612e5f565b67ffffffffffffffff811115613c9357613c926131d9565b5b613c9d825461358c565b613ca8828285613be4565b600060209050601f831160018114613cdb5760008415613cc9578287015190505b613cd38582613c55565b865550613d3b565b601f198416613ce986613ac5565b60005b82811015613d1157848901518255600182019150602085019450602081019050613cec565b86831015613d2e5784890151613d2a601f891682613c37565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613d9f602983612e6a565b9150613daa82613d43565b604082019050919050565b60006020820190508181036000830152613dce81613d92565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613e31602a83612e6a565b9150613e3c82613dd5565b604082019050919050565b60006020820190508181036000830152613e6081613e24565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613ec3602f83612e6a565b9150613ece82613e67565b604082019050919050565b60006020820190508181036000830152613ef281613eb6565b9050919050565b600081905092915050565b6000613f0f82612e5f565b613f198185613ef9565b9350613f29818560208601612e7b565b80840191505092915050565b60008154613f428161358c565b613f4c8186613ef9565b94506001821660008114613f675760018114613f7c57613faf565b60ff1983168652811515820286019350613faf565b613f8585613ac5565b60005b83811015613fa757815481890152600182019150602081019050613f88565b838801955050505b50505092915050565b6000613fc48286613f04565b9150613fd08285613f04565b9150613fdc8284613f35565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614045602683612e6a565b915061405082613fe9565b604082019050919050565b6000602082019050818103600083015261407481614038565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006140d7602c83612e6a565b91506140e28261407b565b604082019050919050565b60006020820190508181036000830152614106816140ca565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000614169602583612e6a565b91506141748261410d565b604082019050919050565b600060208201905081810360008301526141988161415c565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006141fb602483612e6a565b91506142068261419f565b604082019050919050565b6000602082019050818103600083015261422a816141ee565b9050919050565b600061423c82612f1a565b915061424783612f1a565b92508282101561425a576142596138dd565b5b828203905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061429b601983612e6a565b91506142a682614265565b602082019050919050565b600060208201905081810360008301526142ca8161428e565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061432d603283612e6a565b9150614338826142d1565b604082019050919050565b6000602082019050818103600083015261435c81614320565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061439d82612f1a565b91506143a883612f1a565b9250826143b8576143b7614363565b5b828204905092915050565b60006143ce82612f1a565b91506143d983612f1a565b9250826143e9576143e8614363565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b600061441b826143f4565b61442581856143ff565b9350614435818560208601612e7b565b61443e81612eae565b840191505092915050565b600060808201905061445e6000830187612faf565b61446b6020830186612faf565b6144786040830185613045565b818103606083015261448a8184614410565b905095945050505050565b6000815190506144a481612d77565b92915050565b6000602082840312156144c0576144bf612d41565b5b60006144ce84828501614495565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061453c602083612e6a565b915061454782614506565b602082019050919050565b6000602082019050818103600083015261456b8161452f565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006145a8601c83612e6a565b91506145b382614572565b602082019050919050565b600060208201905081810360008301526145d78161459b565b905091905056fea2646970667358221220e3879bfcc8feff53747298d318c6fc713d92d644c82be265fa2c84593c1ab94e64736f6c634300080f003368747470733a2f2f626166796265696364376a76697934797337677676766637327234776761716672773767336f64616279613636627a7a6b66746d376177756e79712e697066732e647765622e6c696e6b2f