60806040526115b3600955610613600a5566071afd498d0000600b55600a600c556032600d556003600e5560c8600f556000601060006101000a81548160ff0219169083151502179055503480156200005757600080fd5b506040518060400160405280600681526020017f42696420497400000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f42494400000000000000000000000000000000000000000000000000000000008152508160029081620000d5919062000997565b508060039081620000e7919062000997565b5050506000620000fc620001b560201b60201c565b905080600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350620001af33600f54620001bd60201b60201c565b62000c56565b600033905090565b620001df828260405180602001604052806000815250620001e360201b60201c565b5050565b620001f88383836001620001fd60201b60201c565b505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036200026a576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008403620002a5576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620002ba60008683876200055060201b60201c565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b858110156200052b57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4838015620004dd5750620004db60008884886200055660201b60201c565b155b1562000515576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8180600101925050808060010191505062000458565b508060008190555050620005496000868387620006f460201b60201c565b5050505050565b50505050565b6000620005848473ffffffffffffffffffffffffffffffffffffffff16620006fa60201b62001c2d1760201c565b15620006e7578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620005b6620001b560201b60201c565b8786866040518563ffffffff1660e01b8152600401620005da949392919062000b6e565b6020604051808303816000875af19250505080156200061957506040513d601f19601f8201168201806040525081019062000616919062000c24565b60015b62000696573d80600081146200064c576040519150601f19603f3d011682016040523d82523d6000602084013e62000651565b606091505b5060008151036200068e576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050620006ec565b600190505b949350505050565b50505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200079f57607f821691505b602082108103620007b557620007b462000757565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200081f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620007e0565b6200082b8683620007e0565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000878620008726200086c8462000843565b6200084d565b62000843565b9050919050565b6000819050919050565b620008948362000857565b620008ac620008a3826200087f565b848454620007ed565b825550505050565b600090565b620008c3620008b4565b620008d081848462000889565b505050565b5b81811015620008f857620008ec600082620008b9565b600181019050620008d6565b5050565b601f82111562000947576200091181620007bb565b6200091c84620007d0565b810160208510156200092c578190505b620009446200093b85620007d0565b830182620008d5565b50505b505050565b600082821c905092915050565b60006200096c600019846008026200094c565b1980831691505092915050565b600062000987838362000959565b9150826002028217905092915050565b620009a2826200071d565b67ffffffffffffffff811115620009be57620009bd62000728565b5b620009ca825462000786565b620009d7828285620008fc565b600060209050601f83116001811462000a0f5760008415620009fa578287015190505b62000a06858262000979565b86555062000a76565b601f19841662000a1f86620007bb565b60005b8281101562000a495784890151825560018201915060208501945060208101905062000a22565b8683101562000a69578489015162000a65601f89168262000959565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000aab8262000a7e565b9050919050565b62000abd8162000a9e565b82525050565b62000ace8162000843565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101562000b1057808201518184015260208101905062000af3565b60008484015250505050565b6000601f19601f8301169050919050565b600062000b3a8262000ad4565b62000b46818562000adf565b935062000b5881856020860162000af0565b62000b638162000b1c565b840191505092915050565b600060808201905062000b85600083018762000ab2565b62000b94602083018662000ab2565b62000ba3604083018562000ac3565b818103606083015262000bb7818462000b2d565b905095945050505050565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b62000bfe8162000bc7565b811462000c0a57600080fd5b50565b60008151905062000c1e8162000bf3565b92915050565b60006020828403121562000c3d5762000c3c62000bc2565b5b600062000c4d8482850162000c0d565b91505092915050565b613e228062000c666000396000f3fe6080604052600436106102045760003560e01c80636d7c4a4b11610118578063a7027357116100a0578063d5abeb011161006f578063d5abeb0114610736578063e985e9c514610761578063f2fde38b1461079e578063f892c6e2146107c7578063f968adbe146107f257610204565b8063a70273571461067a578063b88d4fde146106a5578063c87b56dd146106ce578063d12397301461070b57610204565b80638da5cb5b116100e75780638da5cb5b146105a557806395d89b41146105d057806398d5fdca146105fb578063a035b1fe14610626578063a22cb4651461065157610204565b80636d7c4a4b1461051157806370a082311461053a578063715018a6146105775780637ba5e6211461058e57610204565b80632f745c591161019b578063453c23101161016a578063453c2310146104185780634f6ccce71461044357806355f804b3146104805780636352211e146104a95780636c0360eb146104e657610204565b80632f745c591461037057806336f5b9a3146103ad5780633ccfd60b146103d857806342842e0e146103ef57610204565b80630c23bb3f116101d75780630c23bb3f146102d757806318160ddd1461030057806323b872dd1461032b5780632db115441461035457610204565b806301ffc9a71461020957806306fdde0314610246578063081812fc14610271578063095ea7b3146102ae575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b9190612ce6565b61081d565b60405161023d9190612d2e565b60405180910390f35b34801561025257600080fd5b5061025b610967565b6040516102689190612dd9565b60405180910390f35b34801561027d57600080fd5b5061029860048036038101906102939190612e31565b6109f9565b6040516102a59190612e9f565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d09190612ee6565b610a75565b005b3480156102e357600080fd5b506102fe60048036038101906102f99190612e31565b610b7f565b005b34801561030c57600080fd5b50610315610c05565b6040516103229190612f35565b60405180910390f35b34801561033757600080fd5b50610352600480360381019061034d9190612f50565b610c13565b005b61036e60048036038101906103699190612e31565b610c23565b005b34801561037c57600080fd5b5061039760048036038101906103929190612ee6565b610da8565b6040516103a49190612f35565b60405180910390f35b3480156103b957600080fd5b506103c2610f7e565b6040516103cf9190612f35565b60405180910390f35b3480156103e457600080fd5b506103ed610f84565b005b3480156103fb57600080fd5b5061041660048036038101906104119190612f50565b6110af565b005b34801561042457600080fd5b5061042d6110cf565b60405161043a9190612f35565b60405180910390f35b34801561044f57600080fd5b5061046a60048036038101906104659190612e31565b6110d5565b6040516104779190612f35565b60405180910390f35b34801561048c57600080fd5b506104a760048036038101906104a291906130d8565b611219565b005b3480156104b557600080fd5b506104d060048036038101906104cb9190612e31565b6112a8565b6040516104dd9190612e9f565b60405180910390f35b3480156104f257600080fd5b506104fb6112be565b6040516105089190612dd9565b60405180910390f35b34801561051d57600080fd5b5061053860048036038101906105339190612e31565b61134c565b005b34801561054657600080fd5b50610561600480360381019061055c9190613121565b6113d2565b60405161056e9190612f35565b60405180910390f35b34801561058357600080fd5b5061058c6114a1565b005b34801561059a57600080fd5b506105a36115de565b005b3480156105b157600080fd5b506105ba611686565b6040516105c79190612e9f565b60405180910390f35b3480156105dc57600080fd5b506105e56116b0565b6040516105f29190612dd9565b60405180910390f35b34801561060757600080fd5b50610610611742565b60405161061d9190612f35565b60405180910390f35b34801561063257600080fd5b5061063b611777565b6040516106489190612f35565b60405180910390f35b34801561065d57600080fd5b506106786004803603810190610673919061317a565b61177d565b005b34801561068657600080fd5b5061068f6118f4565b60405161069c9190612f35565b60405180910390f35b3480156106b157600080fd5b506106cc60048036038101906106c7919061325b565b6118fa565b005b3480156106da57600080fd5b506106f560048036038101906106f09190612e31565b61194d565b6040516107029190612dd9565b60405180910390f35b34801561071757600080fd5b506107206119c9565b60405161072d9190612d2e565b60405180910390f35b34801561074257600080fd5b5061074b6119dc565b6040516107589190612f35565b60405180910390f35b34801561076d57600080fd5b50610788600480360381019061078391906132de565b6119e2565b6040516107959190612d2e565b60405180910390f35b3480156107aa57600080fd5b506107c560048036038101906107c09190613121565b611a76565b005b3480156107d357600080fd5b506107dc611c21565b6040516107e99190612f35565b60405180910390f35b3480156107fe57600080fd5b50610807611c27565b6040516108149190612f35565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108e857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061095057507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610960575061095f82611c50565b5b9050919050565b6060600280546109769061334d565b80601f01602080910402602001604051908101604052809291908181526020018280546109a29061334d565b80156109ef5780601f106109c4576101008083540402835291602001916109ef565b820191906000526020600020905b8154815290600101906020018083116109d257829003601f168201915b5050505050905090565b6000610a0482611cba565b610a3a576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a80826112a8565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ae7576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b06611cf4565b73ffffffffffffffffffffffffffffffffffffffff1614158015610b385750610b3681610b31611cf4565b6119e2565b155b15610b6f576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b7a838383611cfc565b505050565b610b87611cf4565b73ffffffffffffffffffffffffffffffffffffffff16610ba5611686565b73ffffffffffffffffffffffffffffffffffffffff1614610bfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf2906133ca565b60405180910390fd5b80600a8190555050565b600060015460005403905090565b610c1e838383611dae565b505050565b601060009054906101000a900460ff16610c72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6990613436565b60405180910390fd5b6001600954610c819190613485565b81610c8a610c05565b610c949190613485565b10610cd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccb90613505565b60405180910390fd5b6000610cde611742565b90506000600d54905060008203610cf557600e5490505b8083610d003361229d565b610d0a9190613485565b1115610d4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4290613571565b60405180910390fd5b8183610d579190613591565b341015610d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d909061361f565b60405180910390fd5b610da3338461236c565b505050565b6000610db3836113d2565b8210610deb576040517f0ddac30e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054905060008060005b83811015610f73576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015115610ed45750610f66565b600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610f1457806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f6457868403610f5b578195505050505050610f78565b83806001019450505b505b8080600101915050610df7565b600080fd5b92915050565b600f5481565b610f8c611cf4565b73ffffffffffffffffffffffffffffffffffffffff16610faa611686565b73ffffffffffffffffffffffffffffffffffffffff1614611000576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff7906133ca565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff164760405161102690613670565b60006040518083038185875af1925050503d8060008114611063576040519150601f19603f3d011682016040523d82523d6000602084013e611068565b606091505b50509050806110ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a3906136d1565b60405180910390fd5b50565b6110ca838383604051806020016040528060008152506118fa565b505050565b600d5481565b60008060005490506000805b828110156111e1576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516111d3578583036111ca5781945050505050611214565b82806001019350505b5080806001019150506110e1565b506040517fa723001c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b611221611cf4565b73ffffffffffffffffffffffffffffffffffffffff1661123f611686565b73ffffffffffffffffffffffffffffffffffffffff1614611295576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128c906133ca565b60405180910390fd5b80601190816112a4919061389d565b5050565b60006112b38261238a565b600001519050919050565b601180546112cb9061334d565b80601f01602080910402602001604051908101604052809291908181526020018280546112f79061334d565b80156113445780601f1061131957610100808354040283529160200191611344565b820191906000526020600020905b81548152906001019060200180831161132757829003601f168201915b505050505081565b611354611cf4565b73ffffffffffffffffffffffffffffffffffffffff16611372611686565b73ffffffffffffffffffffffffffffffffffffffff16146113c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bf906133ca565b60405180910390fd5b80600e8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611439576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6114a9611cf4565b73ffffffffffffffffffffffffffffffffffffffff166114c7611686565b73ffffffffffffffffffffffffffffffffffffffff161461151d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611514906133ca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6115e6611cf4565b73ffffffffffffffffffffffffffffffffffffffff16611604611686565b73ffffffffffffffffffffffffffffffffffffffff161461165a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611651906133ca565b60405180910390fd5b601060009054906101000a900460ff1615601060006101000a81548160ff021916908315150217905550565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600380546116bf9061334d565b80601f01602080910402602001604051908101604052809291908181526020018280546116eb9061334d565b80156117385780601f1061170d57610100808354040283529160200191611738565b820191906000526020600020905b81548152906001019060200180831161171b57829003601f168201915b5050505050905090565b60008061174d610c05565b90506000600a54821015611764576000905061176f565b66071afd498d000090505b809250505090565b600b5481565b611785611cf4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117e9576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760006117f6611cf4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166118a3611cf4565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118e89190612d2e565b60405180910390a35050565b600e5481565b611905848484611dae565b61191184848484612606565b611947576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606061195882611cba565b611997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198e906139e1565b60405180910390fd5b60116119a283612784565b6040516020016119b3929190613b0c565b6040516020818303038152906040529050919050565b601060009054906101000a900460ff1681565b60095481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a7e611cf4565b73ffffffffffffffffffffffffffffffffffffffff16611a9c611686565b73ffffffffffffffffffffffffffffffffffffffff1614611af2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae9906133ca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5890613bad565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5481565b600c5481565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482108015611ced575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611db98261238a565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611de0611cf4565b73ffffffffffffffffffffffffffffffffffffffff161480611e135750611e128260000151611e0d611cf4565b6119e2565b5b80611e585750611e21611cf4565b73ffffffffffffffffffffffffffffffffffffffff16611e40846109f9565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611e91576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611efa576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611f60576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f6d85858560016128e4565b611f7d6000848460000151611cfc565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361222d5760005481101561222c5782600001516004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461229685858560016128ea565b5050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612304576040517f35ebb31900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6123868282604051806020016040528060008152506128f0565b5050565b612392612c37565b60008290506000548110156125cf576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516125cd57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146124b1578092505050612601565b5b6001156125cc57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146125c7578092505050612601565b6124b2565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60006126278473ffffffffffffffffffffffffffffffffffffffff16611c2d565b15612777578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612650611cf4565b8786866040518563ffffffff1660e01b81526004016126729493929190613c22565b6020604051808303816000875af19250505080156126ae57506040513d601f19601f820116820180604052508101906126ab9190613c83565b60015b612727573d80600081146126de576040519150601f19603f3d011682016040523d82523d6000602084013e6126e3565b606091505b50600081510361271f576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061277c565b600190505b949350505050565b6060600082036127cb576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506128df565b600082905060005b600082146127fd5780806127e690613cb0565b915050600a826127f69190613d27565b91506127d3565b60008167ffffffffffffffff81111561281957612818612fad565b5b6040519080825280601f01601f19166020018201604052801561284b5781602001600182028036833780820191505090505b5090505b600085146128d8576001826128649190613d58565b9150600a856128739190613d8c565b603061287f9190613485565b60f81b81838151811061289557612894613dbd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128d19190613d27565b945061284f565b8093505050505b919050565b50505050565b50505050565b6128fd8383836001612902565b505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361296e576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084036129a8576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6129b560008683876128e4565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b85811015612c1a57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4838015612bce5750612bcc6000888488612606565b155b15612c05576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81806001019250508080600101915050612b53565b508060008190555050612c3060008683876128ea565b5050505050565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612cc381612c8e565b8114612cce57600080fd5b50565b600081359050612ce081612cba565b92915050565b600060208284031215612cfc57612cfb612c84565b5b6000612d0a84828501612cd1565b91505092915050565b60008115159050919050565b612d2881612d13565b82525050565b6000602082019050612d436000830184612d1f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612d83578082015181840152602081019050612d68565b60008484015250505050565b6000601f19601f8301169050919050565b6000612dab82612d49565b612db58185612d54565b9350612dc5818560208601612d65565b612dce81612d8f565b840191505092915050565b60006020820190508181036000830152612df38184612da0565b905092915050565b6000819050919050565b612e0e81612dfb565b8114612e1957600080fd5b50565b600081359050612e2b81612e05565b92915050565b600060208284031215612e4757612e46612c84565b5b6000612e5584828501612e1c565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612e8982612e5e565b9050919050565b612e9981612e7e565b82525050565b6000602082019050612eb46000830184612e90565b92915050565b612ec381612e7e565b8114612ece57600080fd5b50565b600081359050612ee081612eba565b92915050565b60008060408385031215612efd57612efc612c84565b5b6000612f0b85828601612ed1565b9250506020612f1c85828601612e1c565b9150509250929050565b612f2f81612dfb565b82525050565b6000602082019050612f4a6000830184612f26565b92915050565b600080600060608486031215612f6957612f68612c84565b5b6000612f7786828701612ed1565b9350506020612f8886828701612ed1565b9250506040612f9986828701612e1c565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612fe582612d8f565b810181811067ffffffffffffffff8211171561300457613003612fad565b5b80604052505050565b6000613017612c7a565b90506130238282612fdc565b919050565b600067ffffffffffffffff82111561304357613042612fad565b5b61304c82612d8f565b9050602081019050919050565b82818337600083830152505050565b600061307b61307684613028565b61300d565b90508281526020810184848401111561309757613096612fa8565b5b6130a2848285613059565b509392505050565b600082601f8301126130bf576130be612fa3565b5b81356130cf848260208601613068565b91505092915050565b6000602082840312156130ee576130ed612c84565b5b600082013567ffffffffffffffff81111561310c5761310b612c89565b5b613118848285016130aa565b91505092915050565b60006020828403121561313757613136612c84565b5b600061314584828501612ed1565b91505092915050565b61315781612d13565b811461316257600080fd5b50565b6000813590506131748161314e565b92915050565b6000806040838503121561319157613190612c84565b5b600061319f85828601612ed1565b92505060206131b085828601613165565b9150509250929050565b600067ffffffffffffffff8211156131d5576131d4612fad565b5b6131de82612d8f565b9050602081019050919050565b60006131fe6131f9846131ba565b61300d565b90508281526020810184848401111561321a57613219612fa8565b5b613225848285613059565b509392505050565b600082601f83011261324257613241612fa3565b5b81356132528482602086016131eb565b91505092915050565b6000806000806080858703121561327557613274612c84565b5b600061328387828801612ed1565b945050602061329487828801612ed1565b93505060406132a587828801612e1c565b925050606085013567ffffffffffffffff8111156132c6576132c5612c89565b5b6132d28782880161322d565b91505092959194509250565b600080604083850312156132f5576132f4612c84565b5b600061330385828601612ed1565b925050602061331485828601612ed1565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061336557607f821691505b6020821081036133785761337761331e565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006133b4602083612d54565b91506133bf8261337e565b602082019050919050565b600060208201905081810360008301526133e3816133a7565b9050919050565b7f4d696e74696e67206973206e6f74206c697665207965742e0000000000000000600082015250565b6000613420601883612d54565b915061342b826133ea565b602082019050919050565b6000602082019050818103600083015261344f81613413565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061349082612dfb565b915061349b83612dfb565b92508282019050808211156134b3576134b2613456565b5b92915050565b7f4e6f206d6f726500000000000000000000000000000000000000000000000000600082015250565b60006134ef600783612d54565b91506134fa826134b9565b602082019050919050565b6000602082019050818103600083015261351e816134e2565b9050919050565b7f4d6178207065722077616c6c6574000000000000000000000000000000000000600082015250565b600061355b600e83612d54565b915061356682613525565b602082019050919050565b6000602082019050818103600083015261358a8161354e565b9050919050565b600061359c82612dfb565b91506135a783612dfb565b92508282026135b581612dfb565b915082820484148315176135cc576135cb613456565b5b5092915050565b7f506c656173652073656e642074686520657861637420616d6f756e742e000000600082015250565b6000613609601d83612d54565b9150613614826135d3565b602082019050919050565b60006020820190508181036000830152613638816135fc565b9050919050565b600081905092915050565b50565b600061365a60008361363f565b91506136658261364a565b600082019050919050565b600061367b8261364d565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b60006136bb601083612d54565b91506136c682613685565b602082019050919050565b600060208201905081810360008301526136ea816136ae565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026137537fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613716565b61375d8683613716565b95508019841693508086168417925050509392505050565b6000819050919050565b600061379a61379561379084612dfb565b613775565b612dfb565b9050919050565b6000819050919050565b6137b48361377f565b6137c86137c0826137a1565b848454613723565b825550505050565b600090565b6137dd6137d0565b6137e88184846137ab565b505050565b5b8181101561380c576138016000826137d5565b6001810190506137ee565b5050565b601f82111561385157613822816136f1565b61382b84613706565b8101602085101561383a578190505b61384e61384685613706565b8301826137ed565b50505b505050565b600082821c905092915050565b600061387460001984600802613856565b1980831691505092915050565b600061388d8383613863565b9150826002028217905092915050565b6138a682612d49565b67ffffffffffffffff8111156138bf576138be612fad565b5b6138c9825461334d565b6138d4828285613810565b600060209050601f83116001811461390757600084156138f5578287015190505b6138ff8582613881565b865550613967565b601f198416613915866136f1565b60005b8281101561393d57848901518255600182019150602085019450602081019050613918565b8683101561395a5784890151613956601f891682613863565b8355505b6001600288020188555050505b505050505050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006139cb602f83612d54565b91506139d68261396f565b604082019050919050565b600060208201905081810360008301526139fa816139be565b9050919050565b600081905092915050565b60008154613a198161334d565b613a238186613a01565b94506001821660008114613a3e5760018114613a5357613a86565b60ff1983168652811515820286019350613a86565b613a5c856136f1565b60005b83811015613a7e57815481890152600182019150602081019050613a5f565b838801955050505b50505092915050565b6000613a9a82612d49565b613aa48185613a01565b9350613ab4818560208601612d65565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000613af6600583613a01565b9150613b0182613ac0565b600582019050919050565b6000613b188285613a0c565b9150613b248284613a8f565b9150613b2f82613ae9565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613b97602683612d54565b9150613ba282613b3b565b604082019050919050565b60006020820190508181036000830152613bc681613b8a565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000613bf482613bcd565b613bfe8185613bd8565b9350613c0e818560208601612d65565b613c1781612d8f565b840191505092915050565b6000608082019050613c376000830187612e90565b613c446020830186612e90565b613c516040830185612f26565b8181036060830152613c638184613be9565b905095945050505050565b600081519050613c7d81612cba565b92915050565b600060208284031215613c9957613c98612c84565b5b6000613ca784828501613c6e565b91505092915050565b6000613cbb82612dfb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ced57613cec613456565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613d3282612dfb565b9150613d3d83612dfb565b925082613d4d57613d4c613cf8565b5b828204905092915050565b6000613d6382612dfb565b9150613d6e83612dfb565b9250828203905081811115613d8657613d85613456565b5b92915050565b6000613d9782612dfb565b9150613da283612dfb565b925082613db257613db1613cf8565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220bad5b177b65b0cdd808ef88575792c746c70a3e4314ff644fba8e78d362f767f64736f6c63430008110033