Advertisement
robloxhack_3000

builderman's profile [2020!]

Jan 22nd, 2020
2,012
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 120.53 KB | None | 0 0
  1. <html><head><script name="BTRoblox/inject.js">"use strict";
  2. (() => {
  3. const templates = {}
  4. let settingsAreLoaded = false
  5. let gtsNode
  6.  
  7. let settings
  8. let currentPage
  9. let matches
  10. let IS_DEV_MODE
  11.  
  12. const ContentJS = {
  13. send(action, ...args) {
  14. document.dispatchEvent(new CustomEvent("content." + action, { detail: args }))
  15. },
  16. listen(actions, callback, props) {
  17. const actionList = actions.split(" ")
  18. const once = props && props.once
  19.  
  20. const cb = ev => {
  21. if(once) {
  22. actionList.forEach(action => {
  23. document.removeEventListener(`inject.${action}`, cb)
  24. })
  25. }
  26.  
  27. return callback(...ev.detail)
  28. }
  29.  
  30. actionList.forEach(action => {
  31. document.addEventListener(`inject.${action}`, cb)
  32. })
  33. }
  34. }
  35.  
  36. function HijackAngular(moduleName, objects) {
  37. try {
  38. const module = angular.module(moduleName)
  39. const done = {}
  40.  
  41. module._invokeQueue.forEach(data => {
  42. const [, type, data2] = data
  43. const [name, value] = data2
  44. const fn = objects[name]
  45. if(!fn) { return }
  46.  
  47. done[name] = true
  48. if(type === "constant" || type === "component") {
  49. try { fn(value) }
  50. catch(ex) { console.error(ex) }
  51.  
  52. return
  53. }
  54.  
  55. if(typeof value === "function") {
  56. const injects = value.$inject
  57. const oldFn = value
  58.  
  59. data2[1] = new Proxy(oldFn, {
  60. apply(target, thisArg, args) {
  61. const argMap = {}
  62. args.forEach((x, i) => argMap[injects[i]] = x)
  63.  
  64. return fn.call(thisArg, target, args, argMap)
  65. }
  66. })
  67. } else {
  68. const injects = value
  69. const oldFn = value[value.length - 1]
  70.  
  71. if(typeof oldFn === "function") {
  72. value[value.length - 1] = new Proxy(oldFn, {
  73. apply(target, thisArg, args) {
  74. const argMap = {}
  75. args.forEach((x, i) => argMap[injects[i]] = x)
  76.  
  77. return fn.call(thisArg, target, args, argMap)
  78. }
  79. })
  80. } else {
  81. done[name] = false
  82. }
  83. }
  84. })
  85.  
  86. if(IS_DEV_MODE) {
  87. Object.keys(objects).forEach(name => {
  88. if(!done[name]) {
  89. console.warn(`Failed to hijack ${moduleName}.${name}`)
  90. if(IS_DEV_MODE) { alert(`HijackAngular Missing Module '${moduleName}.${name}'`) }
  91. }
  92. })
  93. }
  94. } catch(ex) {
  95. if(IS_DEV_MODE) {
  96. console.warn(ex)
  97. }
  98. }
  99. }
  100.  
  101. function PreInit() {
  102. const onSet = (a, b, c) => {
  103. if(a[b]) { return c(a[b]) }
  104.  
  105. Object.defineProperty(a, b, {
  106. enumerable: false,
  107. configurable: true,
  108. set(v) {
  109. delete a[b]
  110. a[b] = v
  111. c(v)
  112. }
  113. })
  114. }
  115.  
  116. if(window.googletag) {
  117. if(IS_DEV_MODE) {
  118. console.warn("[BTRoblox] Failed to load inject before googletag")
  119. }
  120. } else {
  121. onSet(window, "googletag", gtag => onSet(gtag, "cmd", () => {
  122. let didIt = false
  123.  
  124. const proto = Node.prototype
  125. const insertBefore = proto.insertBefore
  126. proto.insertBefore = function(...args) {
  127. const node = args[0]
  128. if(node instanceof Node && node.nodeName === "SCRIPT" && node.src.includes("googletagservices.com")) {
  129. didIt = true
  130.  
  131. if(!settingsAreLoaded) {
  132. gtsNode = { this: this, node }
  133. return
  134. } else if(settings.general.hideAds) {
  135. return
  136. }
  137. }
  138.  
  139. return insertBefore.apply(this, args)
  140. }
  141.  
  142. setTimeout(() => {
  143. proto.insertBefore = insertBefore
  144.  
  145. if(!didIt && IS_DEV_MODE) {
  146. alert("Failed to rek googletag")
  147. }
  148. }, 0)
  149. }))
  150. }
  151. }
  152.  
  153. function PostInit() {
  154. if(gtsNode) {
  155. if(!settings.general.hideAds) {
  156. gtsNode.this.insertBefore(gtsNode.node)
  157. }
  158.  
  159. gtsNode = null
  160. }
  161. }
  162.  
  163. function DocumentReady() {
  164. if(!window.jQuery) {
  165. console.warn("[BTR] window.jQuery not set")
  166. return
  167. }
  168.  
  169. if(window.angular) {
  170. const templateCache = {}
  171.  
  172. angular.module("ng").run($templateCache => {
  173. const put = $templateCache.put
  174.  
  175. $templateCache.put = (key, value) => {
  176. let result
  177.  
  178. if(templates[key]) {
  179. delete templates[key]
  180.  
  181. let didReturn = false
  182. ContentJS.listen(`TEMPLATE_${key}`, changedValue => {
  183. templateCache[key] = changedValue
  184.  
  185. result = put.call($templateCache, key, changedValue)
  186. didReturn = true
  187. })
  188.  
  189. ContentJS.send(`TEMPLATE_${key}`, value)
  190.  
  191. console.assert(didReturn, "Template modified did not return in time")
  192. } else {
  193. if(key in templateCache) {
  194. value = templateCache[key]
  195. }
  196.  
  197. result = put.call($templateCache, key, value)
  198. }
  199.  
  200. return result
  201. }
  202. })
  203.  
  204. if(settings.general.smallChatButton) {
  205. HijackAngular("chat", {
  206. chatController(func, args, argMap) {
  207. const result = func.apply(this, args)
  208.  
  209. try {
  210. const { $scope, chatUtility } = argMap
  211.  
  212. const library = $scope.chatLibrary
  213. const width = library.chatLayout.widthOfChat
  214.  
  215. $scope.$watch(() => library.chatLayout.collapsed, value => {
  216. library.chatLayout.widthOfChat = value ? 54 + 6 : width
  217. chatUtility.updateDialogsPosition(library)
  218. })
  219. } catch(ex) {
  220. console.error(ex)
  221. if(IS_DEV_MODE) { alert("HijackAngular Error") }
  222. }
  223.  
  224. return result
  225. }
  226. })
  227. }
  228.  
  229. if(currentPage === "inventory" && settings.inventory.enabled && settings.inventory.inventoryTools) {
  230. HijackAngular("assetsExplorer", {
  231. assetsService(handler, args) {
  232. const result = handler.apply(this, args)
  233.  
  234. try {
  235. const tbuat = result.beginUpdateAssetsItems
  236. result.beginUpdateAssetsItems = function(...iargs) {
  237. const promise = tbuat.apply(result, iargs)
  238.  
  239. ContentJS.send("inventoryUpdateBegin")
  240. promise.then(() => {
  241. setTimeout(() => {
  242. ContentJS.send("inventoryUpdateEnd")
  243. }, 0)
  244. })
  245.  
  246. return promise
  247. }
  248. } catch(ex) {
  249. console.error(ex)
  250. if(IS_DEV_MODE) { alert("HijackAngular Error") }
  251. }
  252.  
  253. return result
  254. }
  255. })
  256. }
  257.  
  258. if(currentPage === "profile" && settings.profile.enabled) {
  259. HijackAngular("peopleList", {
  260. layoutService(handler, args) {
  261. const result = handler.apply(this, args)
  262. result.maxNumberOfFriendsDisplayed = 10
  263. return result
  264. }
  265. })
  266. }
  267.  
  268. if(currentPage === "messages") {
  269. HijackAngular("messages", {
  270. messagesNav(handler, args, argMap) {
  271. const result = handler.apply(this, args)
  272.  
  273. try {
  274. const { $location } = argMap
  275.  
  276. const link = result.link
  277. result.link = function(u) {
  278. try {
  279. u.btr_setPage = function($event) {
  280. if($event.which === 13) {
  281. const value = $event.target.value
  282.  
  283. if(!Number.isNaN(value)) {
  284. $location.search({ page: value })
  285. } else {
  286. $event.target.value = u.currentStatus.currentPage
  287. }
  288.  
  289. $event.preventDefault()
  290. }
  291. }
  292. } catch(ex) {
  293. console.error(ex)
  294. if(IS_DEV_MODE) { alert("HijackAngular Error") }
  295. }
  296.  
  297. return link.call(this, u)
  298. }
  299. } catch(ex) {
  300. console.error(ex)
  301. if(IS_DEV_MODE) { alert("HijackAngular Error") }
  302. }
  303.  
  304. return result
  305. }
  306. })
  307. }
  308.  
  309. if(currentPage === "groups" && settings.groups.redesign) {
  310. if(settings.groups.modifySmallSocialLinksTitle) {
  311. HijackAngular("socialLinksJumbotron", {
  312. socialLinkIcon(component) {
  313. component.bindings.title = "<"
  314. }
  315. })
  316. }
  317.  
  318. if(settings.groups.pagedGroupWall) {
  319. const createCustomPager = ({ $scope }) => {
  320. const wallPosts = []
  321. const pageSize = 10
  322. let loadMorePromise = null
  323. let nextPageCursor = ""
  324. let requestCounter = 0
  325. let lastPageNum = 0
  326. let isLoadingPosts = false
  327.  
  328. const btrPagerStatus = {
  329. prev: false,
  330. next: false,
  331. input: false,
  332. pageNum: 1
  333. }
  334.  
  335. const setPageNumber = page => {
  336. btrPagerStatus.prev = page > 0
  337. btrPagerStatus.next = !!nextPageCursor || wallPosts.length > ((page + 1) * pageSize)
  338. btrPagerStatus.input = true
  339. btrPagerStatus.pageNum = page + 1
  340.  
  341. lastPageNum = page
  342.  
  343. const startIndex = page * pageSize
  344. const endIndex = startIndex + pageSize
  345.  
  346. $scope.groupWall.posts = wallPosts.slice(startIndex, endIndex).map($scope.convertResultToPostObject)
  347. $scope.$applyAsync()
  348. }
  349.  
  350. const loadMorePosts = () => {
  351. if(loadMorePromise) {
  352. return loadMorePromise
  353. }
  354.  
  355. return loadMorePromise = new Promise(async resolve => {
  356. const groupId = $scope.library.currentGroup.id
  357. const baseUrl = `https://groups.roblox.com/v2/groups/${groupId}/wall/posts?sortOrder=Desc&limit=100&cursor=`
  358.  
  359. const resp = await fetch(baseUrl + nextPageCursor, { credentials: "include" })
  360. const json = await resp.json()
  361.  
  362. if(!loadMorePromise) { return }
  363.  
  364. nextPageCursor = json.nextPageCursor || null
  365. wallPosts.push(...json.data.filter(x => x.poster))
  366.  
  367. loadMorePromise = null
  368. resolve()
  369. })
  370. }
  371.  
  372. const requestWallPosts = page => {
  373. if(!Number.isSafeInteger(page)) { return }
  374. const myCounter = ++requestCounter
  375.  
  376. btrPagerStatus.prev = false
  377. btrPagerStatus.next = false
  378. btrPagerStatus.input = false
  379.  
  380. page = Math.max(0, Math.floor(page))
  381. isLoadingPosts = true
  382.  
  383. const startIndex = page * pageSize
  384. const endIndex = startIndex + pageSize
  385.  
  386. const tryAgain = () => {
  387. if(requestCounter !== myCounter) { return }
  388.  
  389. if(wallPosts.length < endIndex && nextPageCursor !== null) {
  390. loadMorePosts().then(tryAgain)
  391. return
  392. }
  393.  
  394. const maxPage = Math.max(0, Math.floor((wallPosts.length - 1) / pageSize))
  395. setPageNumber(Math.min(maxPage, page))
  396.  
  397. isLoadingPosts = false
  398. }
  399.  
  400. tryAgain()
  401. }
  402.  
  403. $scope.groupWall.pager.isBusy = () => isLoadingPosts
  404. $scope.groupWall.pager.loadNextPage = () => {}
  405. $scope.groupWall.pager.loadFirstPage = () => {
  406. wallPosts.splice(0, wallPosts.length)
  407. nextPageCursor = ""
  408. loadMorePromise = null
  409. requestWallPosts(0)
  410. }
  411.  
  412. $scope.btrPagerStatus = btrPagerStatus
  413. $scope.btrLoadWallPosts = cursor => {
  414. let pageNum = lastPageNum
  415.  
  416. if(cursor === "prev") {
  417. pageNum = lastPageNum - 1
  418. } else if(cursor === "next") {
  419. pageNum = lastPageNum + 1
  420. } else if(cursor === "input") {
  421. const input = document.querySelector(".btr-comment-pager input")
  422. const value = parseInt(input.value, 10)
  423.  
  424. if(Number.isSafeInteger(value)) {
  425. pageNum = Math.max(0, value - 1)
  426. }
  427. } else if(cursor === "first") {
  428. pageNum = lastPageNum - 50
  429. } else if(cursor === "last") {
  430. pageNum = lastPageNum + 50
  431. }
  432.  
  433. requestWallPosts(pageNum)
  434. }
  435. }
  436.  
  437. HijackAngular("group", {
  438. groupWallController(func, args, argMap) {
  439. const result = func.apply(this, args)
  440.  
  441. try {
  442. createCustomPager(argMap)
  443. } catch(ex) {
  444. console.error(ex)
  445. if(IS_DEV_MODE) { alert("HijackAngular Error") }
  446. }
  447.  
  448. return result
  449. }
  450. })
  451. }
  452. }
  453. } else {
  454. console.warn("[BTR] window.angular not set")
  455. }
  456.  
  457. if(settings.general.fixAudioVolume) {
  458. $(document).on("jPlayer_ready", "#MediaPlayerSingleton", ev => {
  459. const audio = ev.currentTarget.querySelector("audio")
  460. if(audio) {
  461. audio.volume = 0.3
  462. }
  463. })
  464. }
  465.  
  466. if(settings.general.fixAudioPreview) {
  467. const fixing = {}
  468.  
  469. ContentJS.listen("fixAudioPreview", (url, blobUrl) => {
  470. if(!fixing[url]) { return }
  471. delete fixing[url]
  472.  
  473. console.warn("[BTRoblox] Fixed broken audio previewer")
  474.  
  475. document.querySelectorAll(`.MediaPlayerIcon[data-mediathumb-url="${url}"]`).forEach(btn => {
  476. btn.classList.add("btr-audioFix")
  477. setTimeout(() => btn.classList.remove("btr-audioFix"), 5e3)
  478.  
  479. if(btn.classList.contains("icon-pause")) { btn.click() }
  480.  
  481. btn.dataset.mediathumbUrl = blobUrl
  482. btn.click()
  483. })
  484. })
  485.  
  486. $(document).on("jPlayer_canplay", "#MediaPlayerSingleton", ev => {
  487. delete fixing[ev.jPlayer.status.src]
  488. })
  489.  
  490. $(document).on("jPlayer_error", "#MediaPlayerSingleton", ev => {
  491. const errorInfo = ev.jPlayer.error
  492. const url = errorInfo.context
  493. const data = fixing[url]
  494.  
  495. if(errorInfo.type === "e_url" && data) {
  496. clearTimeout(data.timeout)
  497. ContentJS.send("fixAudioPreview", url)
  498. }
  499. })
  500.  
  501. $(document).on("jPlayer_loadstart", "#MediaPlayerSingleton", ev => {
  502. const url = ev.jPlayer.status.src
  503.  
  504. if(url.includes("rbxcdn.com") && !fixing[url]) {
  505. const data = fixing[url] = {}
  506.  
  507. data.timeout = setTimeout(() => {
  508. if(fixing[url]) {
  509. ContentJS.send("fixAudioPreview", url)
  510. }
  511. }, 500)
  512. }
  513. })
  514. }
  515.  
  516. if(typeof Roblox !== "undefined") {
  517. if(settings.general.hideAds) {
  518. if(Roblox.PrerollPlayer) {
  519. Roblox.PrerollPlayer.waitForPreroll = x => $.Deferred().resolve(x)
  520. }
  521.  
  522. if(Roblox.VideoPreRollDFP) {
  523. Roblox.VideoPreRollDFP = null
  524. }
  525. }
  526.  
  527. if(currentPage === "gamedetails" && settings.gamedetails.enabled) {
  528. const placeId = matches[0]
  529.  
  530. // Server pagers
  531. const createPager = gameInstance => {
  532. let curPage = 1
  533. let maxPage = 1
  534.  
  535. $(".rbx-running-games-load-more").hide() // Hide Load More
  536. $(".rbx-running-games-footer > .pager").hide() // Hide Roblox+ pager?
  537.  
  538. const pager = $(`
  539. <div class=btr-pager-holder>
  540. <ul class="pager btr-server-pager">
  541. <li class=first><a><span class=icon-first-page></a></li>
  542. <li class=pager-prev><a><span class=icon-left></a></li>
  543. <li class=pager-mid>
  544. Page <input class=pager-cur type=text></input>
  545. of <span class=pager-total></span>
  546. </li>
  547. <li class=pager-next><a><span class=icon-right></a></li>
  548. <li class=last><a><span class=icon-last-page></a></li>
  549. </ul>
  550. </div>`).appendTo($(".rbx-running-games-footer"))
  551.  
  552. const updatePager = () => {
  553. pager.find(".pager-cur").val(curPage)
  554. pager.find(".pager-total").text(maxPage)
  555.  
  556. pager.find(".first").toggleClass("disabled", curPage <= 1)
  557. pager.find(".pager-prev").toggleClass("disabled", curPage <= 1)
  558. pager.find(".last").toggleClass("disabled", curPage >= maxPage)
  559. pager.find(".pager-next").toggleClass("disabled", curPage >= maxPage)
  560.  
  561. $(".rbx-game-server-join").removeAttr("href")
  562. }
  563.  
  564. $.ajaxPrefilter(options => {
  565. if(!options.url.includes("/games/getgameinstancesjson")) { return }
  566.  
  567. const startIndex = +new URLSearchParams(options.data).get("startIndex")
  568. if(!Number.isSafeInteger(startIndex)) { return }
  569.  
  570. const success = options.success
  571. options.success = function(...args) {
  572. curPage = Math.floor(startIndex / 10) + 1
  573. maxPage = Math.max(1, Math.ceil(args[0].TotalCollectionSize / 10))
  574.  
  575. $("#rbx-game-server-item-container").find(">.rbx-game-server-item, >.section-content-off").remove()
  576. updatePager()
  577.  
  578. if(!args[0].Collection.length) {
  579. $("#rbx-game-server-item-container").append(`<p class=section-content-off>No Servers Found.</p>`)
  580. }
  581.  
  582. return success.apply(this, args)
  583. }
  584. })
  585.  
  586. pager
  587. .on("click", ".pager-prev:not(.disabled)", () => {
  588. gameInstance.fetchServers(placeId, Math.max((curPage - 2) * 10, 0))
  589. })
  590. .on("click", ".pager-next:not(.disabled)", () => {
  591. gameInstance.fetchServers(placeId, Math.min(curPage * 10, (maxPage - 1) * 10))
  592. })
  593. .on("click", ".first:not(.disabled)", () => {
  594. gameInstance.fetchServers(placeId, 0)
  595. })
  596. .on("click", ".last:not(.disabled)", () => {
  597. gameInstance.fetchServers(placeId, (maxPage - 1) * 10)
  598. })
  599. .on({
  600. blur() {
  601. const text = $(this).val()
  602. let num = parseInt(text, 10)
  603.  
  604. if(!Number.isNaN(num)) {
  605. num = Math.max(1, Math.min(maxPage, num))
  606. gameInstance.fetchServers(placeId, (num - 1) * 10)
  607. }
  608. },
  609. keypress(e) {
  610. if(e.which === 13) {
  611. $(this).blur()
  612. }
  613. }
  614. }, ".pager-cur")
  615. }
  616.  
  617. const init = () => {
  618. if(settings.gamedetails.addServerPager) {
  619. createPager(Roblox.RunningGameInstances)
  620. }
  621.  
  622. // Init tab
  623. const tabBtn = document.querySelector(".rbx-tab.active a")
  624. if(tabBtn) {
  625. jQuery(tabBtn).trigger("shown.bs.tab")
  626. }
  627. }
  628.  
  629. if(Roblox.RunningGameInstances) {
  630. setTimeout(init, 0)
  631. }
  632. } else if(currentPage === "develop") {
  633. if(Roblox.BuildPage) {
  634. Roblox.BuildPage.GameShowcase = new Proxy(Roblox.BuildPage.GameShowcase || {}, {
  635. set(target, name, value) {
  636. target[name] = value
  637. const table = document.querySelector(`.item-table[data-rootplace-id="${name}"]`)
  638. if(table) { table.dataset.inShowcase = value }
  639. return true
  640. }
  641. })
  642. }
  643. }
  644. } else {
  645. if(IS_DEV_MODE) {
  646. alert("[BTR] window.Roblox not set")
  647. }
  648. }
  649.  
  650. if(typeof Sys !== "undefined" && Sys.WebForms != null) {
  651. const prm = Sys.WebForms.PageRequestManager.getInstance()
  652.  
  653. prm.add_pageLoaded(() => ContentJS.send("ajaxUpdate"))
  654. }
  655. }
  656.  
  657. ContentJS.listen("TEMPLATE_INIT", key => templates[key] = true)
  658. ContentJS.listen("linkify", cl => {
  659. const target = $(`.${cl}`)
  660. target.removeClass(cl)
  661. if(window.Roblox && Roblox.Linkify) { target.linkify() }
  662. else { target.addClass("linkify") }
  663. })
  664.  
  665. ContentJS.listen("INIT", (...initData) => {
  666. [settings, currentPage, matches, IS_DEV_MODE] = initData
  667. settingsAreLoaded = true
  668.  
  669. PostInit()
  670.  
  671. if(document.readyState === "loading") {
  672. document.addEventListener("DOMContentLoaded", DocumentReady)
  673. } else {
  674. DocumentReady()
  675. }
  676. })
  677.  
  678. PreInit()
  679. })();</script><style name="BTRoblox/inject.css" type="text/css"></style><!--<![endif]--><style type="text/css">[uib-tooltip-popup].tooltip.top-left > .tooltip-arrow,[uib-tooltip-popup].tooltip.top-right > .tooltip-arrow,[uib-tooltip-popup].tooltip.bottom-left > .tooltip-arrow,[uib-tooltip-popup].tooltip.bottom-right > .tooltip-arrow,[uib-tooltip-popup].tooltip.left-top > .tooltip-arrow,[uib-tooltip-popup].tooltip.left-bottom > .tooltip-arrow,[uib-tooltip-popup].tooltip.right-top > .tooltip-arrow,[uib-tooltip-popup].tooltip.right-bottom > .tooltip-arrow,[uib-tooltip-html-popup].tooltip.top-left > .tooltip-arrow,[uib-tooltip-html-popup].tooltip.top-right > .tooltip-arrow,[uib-tooltip-html-popup].tooltip.bottom-left > .tooltip-arrow,[uib-tooltip-html-popup].tooltip.bottom-right > .tooltip-arrow,[uib-tooltip-html-popup].tooltip.left-top > .tooltip-arrow,[uib-tooltip-html-popup].tooltip.left-bottom > .tooltip-arrow,[uib-tooltip-html-popup].tooltip.right-top > .tooltip-arrow,[uib-tooltip-html-popup].tooltip.right-bottom > .tooltip-arrow,[uib-tooltip-template-popup].tooltip.top-left > .tooltip-arrow,[uib-tooltip-template-popup].tooltip.top-right > .tooltip-arrow,[uib-tooltip-template-popup].tooltip.bottom-left > .tooltip-arrow,[uib-tooltip-template-popup].tooltip.bottom-right > .tooltip-arrow,[uib-tooltip-template-popup].tooltip.left-top > .tooltip-arrow,[uib-tooltip-template-popup].tooltip.left-bottom > .tooltip-arrow,[uib-tooltip-template-popup].tooltip.right-top > .tooltip-arrow,[uib-tooltip-template-popup].tooltip.right-bottom > .tooltip-arrow,[uib-popover-popup].popover.top-left > .arrow,[uib-popover-popup].popover.top-right > .arrow,[uib-popover-popup].popover.bottom-left > .arrow,[uib-popover-popup].popover.bottom-right > .arrow,[uib-popover-popup].popover.left-top > .arrow,[uib-popover-popup].popover.left-bottom > .arrow,[uib-popover-popup].popover.right-top > .arrow,[uib-popover-popup].popover.right-bottom > .arrow,[uib-popover-html-popup].popover.top-left > .arrow,[uib-popover-html-popup].popover.top-right > .arrow,[uib-popover-html-popup].popover.bottom-left > .arrow,[uib-popover-html-popup].popover.bottom-right > .arrow,[uib-popover-html-popup].popover.left-top > .arrow,[uib-popover-html-popup].popover.left-bottom > .arrow,[uib-popover-html-popup].popover.right-top > .arrow,[uib-popover-html-popup].popover.right-bottom > .arrow,[uib-popover-template-popup].popover.top-left > .arrow,[uib-popover-template-popup].popover.top-right > .arrow,[uib-popover-template-popup].popover.bottom-left > .arrow,[uib-popover-template-popup].popover.bottom-right > .arrow,[uib-popover-template-popup].popover.left-top > .arrow,[uib-popover-template-popup].popover.left-bottom > .arrow,[uib-popover-template-popup].popover.right-top > .arrow,[uib-popover-template-popup].popover.right-bottom > .arrow{top:auto;bottom:auto;left:auto;right:auto;margin:0;}[uib-popover-popup].popover,[uib-popover-html-popup].popover,[uib-popover-template-popup].popover{display:block !important;}</style><style type="text/css">.uib-position-measure{display:block !important;visibility:hidden !important;position:absolute !important;top:-9999px !important;left:-9999px !important;}.uib-position-scrollbar-measure{position:absolute !important;top:-9999px !important;width:50px !important;height:50px !important;overflow:scroll !important;}.uib-position-body-scrollbar-measure{overflow:scroll !important;}</style><style type="text/css">.ng-animate.item:not(.left):not(.right){-webkit-transition:0s ease-in-out left;transition:0s ease-in-out left}</style><style type="text/css">@charset "UTF-8";[ng\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\:form{display:block;}.ng-animate-shim{visibility:hidden;}.ng-anchor{position:absolute;}</style><title>(1) Home - Roblox</title><meta http-equiv="X-UA-Compatible" content="IE=edge,requiresActiveX=true"><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="author" content="Roblox Corporation"><meta name="description" content="Roblox is a global platform that brings people together through play."><meta name="keywords" content="free games,online games,building games,virtual worlds,free mmo,gaming cloud,physics engine"><meta name="apple-itunes-app" content="app-id=431946152"><script type="application/ld+json">
  680. {
  681. "@context" : "http://schema.org",
  682. "@type" : "Organization",
  683. "name" : "Roblox",
  684. "url" : "https://www.roblox.com/",
  685. "logo": "https://images.rbxcdn.com/c69b74f49e785df33b732273fad9dbe0.png",
  686. "sameAs" : [
  687. "https://www.facebook.com/ROBLOX/",
  688. "https://twitter.com/roblox",
  689. "https://www.linkedin.com/company/147977",
  690. "https://www.instagram.com/roblox/",
  691. "https://www.youtube.com/user/roblox",
  692. "https://plus.google.com/+roblox",
  693. "https://www.twitch.tv/roblox"
  694. ]
  695. }
  696. </script><meta name="user-data" data-userid="1253745616" data-name="lastquest5847" data-isunder13="false"><meta name="locale-data" data-language-code="en_us" data-language-name="English"><meta name="device-meta" data-device-type="computer" data-is-in-app="false" data-is-desktop="true" data-is-phone="false" data-is-tablet="false" data-is-console="false" data-is-android-app="false" data-is-ios-app="false" data-is-uwp-app="false" data-is-xbox-app="false" data-is-amazon-app="false" data-is-win32-app="false" data-is-studio="false" data-is-game-client-browser="false" data-is-ios-device="false" data-is-android-device="false" data-app-type="unknown"><meta name="page-meta" data-internal-page-name="Home"><meta name="performance" data-ui-performance-relative-value="1" data-ui-performance-endpoint="https://metrics.roblox.com/v1/performance/send-measurement"><script>var Roblox=Roblox||{};Roblox.BundleVerifierConstants={isMetricsApiEnabled:true,eventStreamUrl:"//ecsv2.roblox.com/pe?t=diagnostic",deviceType:"Computer",cdnLoggingEnabled:JSON.parse("true")};</script><script>var Roblox=Roblox||{};Roblox.BundleDetector=(function(){var isMetricsApiEnabled=Roblox.BundleVerifierConstants&&Roblox.BundleVerifierConstants.isMetricsApiEnabled;var loadStates={loadSuccess:"loadSuccess",loadFailure:"loadFailure",executionFailure:"executionFailure"};var bundleContentTypes={javascript:"javascript",css:"css"};var ephemeralCounterNames={cdnPrefix:"CDNBundleError_",unknown:"CDNBundleError_unknown",cssError:"CssBundleError",jsError:"JavascriptBundleError",jsFileError:"JsFileExecutionError",resourceError:"ResourcePerformance_Error",resourceLoaded:"ResourcePerformance_Loaded"};return{jsBundlesLoaded:{},bundlesReported:{},counterNames:ephemeralCounterNames,loadStates:loadStates,bundleContentTypes:bundleContentTypes,timing:undefined,setTiming:function(windowTiming){this.timing=windowTiming;},getLoadTime:function(){if(this.timing&&this.timing.domComplete){return this.getCurrentTime()-this.timing.domComplete;}},getCurrentTime:function(){return new Date().getTime();},getCdnProviderName:function(bundleUrl,callBack){if(Roblox.BundleVerifierConstants.cdnLoggingEnabled){var xhr=new XMLHttpRequest();xhr.open('GET',bundleUrl,true);xhr.onreadystatechange=function(){if(xhr.readyState===xhr.HEADERS_RECEIVED){try{var headerValue=xhr.getResponseHeader("rbx-cdn-provider");if(headerValue){callBack(headerValue);}else{callBack();}}catch(e){callBack();}}};xhr.onerror=function(){callBack();};xhr.send();}else{callBack();}},getCdnProviderAndReportMetrics:function(bundleUrl,bundleName,loadState,bundleContentType){this.getCdnProviderName(bundleUrl,function(cdnProviderName){Roblox.BundleDetector.reportMetrics(bundleUrl,bundleName,loadState,bundleContentType,cdnProviderName);});},reportMetrics:function(bundleUrl,bundleName,loadState,bundleContentType,cdnProviderName){if(!isMetricsApiEnabled||!bundleUrl||!loadState||!loadStates.hasOwnProperty(loadState)||!bundleContentType||!bundleContentTypes.hasOwnProperty(bundleContentType)){return;}
  697. var xhr=new XMLHttpRequest();var metricsApiUrl=(Roblox.EnvironmentUrls&&Roblox.EnvironmentUrls.metricsApi)||"https://metrics.roblox.com";xhr.open("POST",metricsApiUrl+"/v1/bundle-metrics/report",true);xhr.setRequestHeader("Content-Type","application/json");xhr.withCredentials=true;xhr.send(JSON.stringify({bundleUrl:bundleUrl,bundleName:bundleName||"",bundleContentType:bundleContentType,loadState:loadState,cdnProviderName:cdnProviderName,loadTimeInMilliseconds:this.getLoadTime()||0}));},logToEphemeralStatistics:function(sequenceName,value){var deviceType=Roblox.BundleVerifierConstants.deviceType;sequenceName+="_"+deviceType;var xhr=new XMLHttpRequest();xhr.open('POST','/game/report-stats?name='+sequenceName+"&value="+value,true);xhr.withCredentials=true;xhr.send();},logToEphemeralCounter:function(ephemeralCounterName){var deviceType=Roblox.BundleVerifierConstants.deviceType;ephemeralCounterName+="_"+deviceType;var xhr=new XMLHttpRequest();xhr.open('POST','/game/report-event?name='+ephemeralCounterName,true);xhr.withCredentials=true;xhr.send();},logToEventStream:function(failedBundle,ctx,cdnProvider,status){var esUrl=Roblox.BundleVerifierConstants.eventStreamUrl,currentPageUrl=encodeURIComponent(window.location.href);var deviceType=Roblox.BundleVerifierConstants.deviceType;ctx+="_"+deviceType;var duration=0;if(window.performance){var perfTiming=window.performance.getEntriesByName(failedBundle);if(perfTiming.length>0){var data=perfTiming[0];duration=data.duration||0;}}
  698. var params="&evt=webBundleError&url="+currentPageUrl+"&ctx="+ctx+"&fileSourceUrl="+encodeURIComponent(failedBundle)+"&cdnName="+(cdnProvider||"unknown")+"&statusCode="+(status||"unknown")+"&loadDuration="+Math.floor(duration);var img=new Image();img.src=esUrl+params;},getCdnInfo:function(failedBundle,ctx,fileType){if(Roblox.BundleVerifierConstants.cdnLoggingEnabled){var xhr=new XMLHttpRequest();var counter=this.counterNames;xhr.open('GET',failedBundle,true);var cdnProvider;xhr.onreadystatechange=function(){if(xhr.readyState===xhr.HEADERS_RECEIVED){cdnProvider=xhr.getResponseHeader("rbx-cdn-provider");if(cdnProvider&&cdnProvider.length>0){Roblox.BundleDetector.logToEphemeralCounter(counter.cdnPrefix+cdnProvider+"_"+fileType);}
  699. else{Roblox.BundleDetector.logToEphemeralCounter(counter.unknown+"_"+fileType);}}
  700. else if(xhr.readyState===xhr.DONE){Roblox.BundleDetector.logToEventStream(failedBundle,ctx,cdnProvider,xhr.status);}};xhr.onerror=function(){Roblox.BundleDetector.logToEphemeralCounter(counter.unknown+"_"+fileType);Roblox.BundleDetector.logToEventStream(failedBundle,ctx,counter.unknown);};xhr.send();}
  701. else{this.logToEventStream(failedBundle,ctx);}},reportResourceError:function(resourceName){var ephemeralCounterName=this.counterNames.resourceError+"_"+resourceName;this.logToEphemeralCounter(ephemeralCounterName);},reportResourceLoaded:function(resourceName){var loadTimeInMs=this.getLoadTime();if(loadTimeInMs){var sequenceName=this.counterNames.resourceLoaded+"_"+resourceName;this.logToEphemeralStatistics(sequenceName,loadTimeInMs);}},reportBundleError:function(bundleTag){var ephemeralCounterName,failedBundle,ctx,contentType;if(bundleTag.rel&&bundleTag.rel==="stylesheet"){ephemeralCounterName=this.counterNames.cssError;failedBundle=bundleTag.href;ctx="css";contentType=bundleContentTypes.css;}else{ephemeralCounterName=this.counterNames.jsError;failedBundle=bundleTag.src;ctx="js";contentType=bundleContentTypes.javascript;}
  702. this.bundlesReported[failedBundle]=true;this.logToEphemeralCounter(ephemeralCounterName);this.getCdnInfo(failedBundle,ctx,ctx);var bundleName;if(bundleTag.dataset){bundleName=bundleTag.dataset.bundlename;}
  703. else{bundleName=bundleTag.getAttribute('data-bundlename');}
  704. this.getCdnProviderAndReportMetrics(failedBundle,bundleName,loadStates.loadFailure,contentType);},bundleDetected:function(bundleName){this.jsBundlesLoaded[bundleName]=true;},verifyBundles:function(document){var ephemeralCounterName=this.counterNames.jsFileError,eventContext=ephemeralCounterName;var scripts=(document&&document.scripts)||window.document.scripts;var errorsList=[];var bundleName;var monitor;for(var i=0;i<scripts.length;i++){var item=scripts[i];if(item.dataset){bundleName=item.dataset.bundlename;monitor=item.dataset.monitor;}
  705. else{bundleName=item.getAttribute('data-bundlename');monitor=item.getAttribute('data-monitor');}
  706. if(item.src&&monitor&&bundleName){if(!Roblox.BundleDetector.jsBundlesLoaded.hasOwnProperty(bundleName)){errorsList.push(item);}}}
  707. if(errorsList.length>0){for(var j=0;j<errorsList.length;j++){var script=errorsList[j];if(!this.bundlesReported[script.src]){this.logToEphemeralCounter(ephemeralCounterName);this.getCdnInfo(script.src,eventContext,'js');if(script.dataset){bundleName=script.dataset.bundlename;}
  708. else{bundleName=script.getAttribute('data-bundlename');}
  709. this.getCdnProviderAndReportMetrics(script.src,bundleName,loadStates.executionFailure,bundleContentTypes.javascript);}}}}};})();window.addEventListener("load",function(evt){Roblox.BundleDetector.verifyBundles();});Roblox.BundleDetector.setTiming(window.performance.timing);</script><link href="https://images.rbxcdn.com/23421382939a9f4ae8bbe60dbe2a3e7e.ico.gzip" rel="icon"><link rel="manifest" href="https://notifications.roblox.com/v2/push-notifications/chrome-manifest" crossorigin="use-credentials"><link onerror="Roblox.BundleDetector&amp;&amp;Roblox.BundleDetector.reportBundleError(this)" rel="stylesheet" data-bundlename="Thumbnails" href="https://static.rbxcdn.com/css/72cd3aca154fd66b2ada809c31d17a2ee0cf653f89ccbbffe4e44025a4afd35e.css/fetch"><link onerror="Roblox.BundleDetector&amp;&amp;Roblox.BundleDetector.reportBundleError(this)" rel="stylesheet" data-bundlename="StyleGuide" href="https://static.rbxcdn.com/css/b5bb43dc638fec383967b9213abd937583decaf992ca9f8a5c089dc7ac8d04eb.css/fetch"><link onerror="Roblox.BundleDetector&amp;&amp;Roblox.BundleDetector.reportBundleError(this)" rel="stylesheet" data-bundlename="Footer" href="https://static.rbxcdn.com/css/55b250e8473888792f885d898973a13692fb22157baf61aaffa62ce4545f3408.css/fetch"><link rel="canonical" href="https://www.roblox.com/home"><link onerror="Roblox.BundleDetector&amp;&amp;Roblox.BundleDetector.reportBundleError(this)" rel="stylesheet" href="https://static.rbxcdn.com/css/leanbase___3678d89e5ec3f4d8c65d863691f31de2_m.css/fetch"><link onerror="Roblox.BundleDetector&amp;&amp;Roblox.BundleDetector.reportBundleError(this)" rel="stylesheet" href="https://static.rbxcdn.com/css/page___03aa53ed13d56a69d25f9ef7eb102fa3_m.css/fetch"><link onerror="Roblox.BundleDetector&amp;&amp;Roblox.BundleDetector.reportBundleError(this)" rel="stylesheet" data-bundlename="PeopleList" href="https://static.rbxcdn.com/css/d708fd4aace739f827de423a092019fb52f893d6d36c80cfbcdd98c040c74e75.css/fetch"><link onerror="Roblox.BundleDetector&amp;&amp;Roblox.BundleDetector.reportBundleError(this)" rel="stylesheet" data-bundlename="PlacesList" href="https://static.rbxcdn.com/css/3e5a7ee1c6d65f8a37ed7bcb50c65e399df74ac92d177bc94f75679b056a39b2.css/fetch"><link onerror="Roblox.BundleDetector&amp;&amp;Roblox.BundleDetector.reportBundleError(this)" rel="stylesheet" data-bundlename="RobuxIcon" href="https://static.rbxcdn.com/css/af4a705d9238d48149768cbd4724797649ca06ff6dbf0b05feab30c7825997be.css/fetch"><link onerror="Roblox.BundleDetector&amp;&amp;Roblox.BundleDetector.reportBundleError(this)" rel="stylesheet" data-bundlename="NotificationStream" href="https://static.rbxcdn.com/css/c5eab44ee3b34acdae36b6dad3297240134fbaaba8f2a77634bf0f893eeafabd.css/fetch"><link onerror="Roblox.BundleDetector&amp;&amp;Roblox.BundleDetector.reportBundleError(this)" rel="stylesheet" data-bundlename="Chat" href="https://static.rbxcdn.com/css/9363da0bd9d79e2636af8699417f40c5884029ed0e48e049edaa1957afde8901.css/fetch"><script>var Roblox=Roblox||{};Roblox.RealTimeSettings=Roblox.RealTimeSettings||{NotificationsEndpoint:"https://realtime.roblox.com",MaxConnectionTime:"21600000",IsEventPublishingEnabled:false,IsDisconnectOnSlowConnectionDisabled:true,IsSignalRClientTransportRestrictionEnabled:true,IsLocalStorageInRealTimeEnabled:true,IsDebuggerEnabled:"False"}</script><script>var Roblox=Roblox||{};Roblox.EnvironmentUrls=Roblox.EnvironmentUrls||{};Roblox.EnvironmentUrls={"abtestingApiSite":"https://abtesting.roblox.com","accountInformationApi":"https://accountinformation.roblox.com","accountSettingsApi":"https://accountsettings.roblox.com","adsApi":"https://ads.roblox.com","apiGatewayUrl":"https://apis.roblox.com","apiProxyUrl":"https://api.roblox.com","assetDeliveryApi":"https://assetdelivery.roblox.com","authApi":"https://auth.roblox.com","authAppSite":"https://authsite.roblox.com","avatarApi":"https://avatar.roblox.com","badgesApi":"https://badges.roblox.com","billingApi":"https://billing.roblox.com","captchaApi":"https://captcha.roblox.com","catalogApi":"https://catalog.roblox.com","chatApi":"https://chat.roblox.com","contactsApi":"https://contacts.roblox.com","developApi":"https://develop.roblox.com","domain":"roblox.com","economyApi":"https://economy.roblox.com","engagementPayoutsApi":"https://engagementpayouts.roblox.com","followingsApi":"https://followings.roblox.com","friendsApi":"https://friends.roblox.com","friendsAppSite":"https://friendsite.roblox.com","gamesApi":"https://games.roblox.com","gameInternationalizationApi":"https://gameinternationalization.roblox.com","groupsApi":"https://groups.roblox.com","inventoryApi":"https://inventory.roblox.com","itemConfigurationApi":"https://itemconfiguration.roblox.com","localeApi":"https://locale.roblox.com","localizationTablesApi":"https://localizationtables.roblox.com","metricsApi":"https://metrics.roblox.com","midasApi":"https://midas.roblox.com","notificationApi":"https://notifications.roblox.com","premiumFeaturesApi":"https://premiumfeatures.roblox.com","presenceApi":"https://presence.roblox.com","publishApi":"https://publish.roblox.com","screenTimeApi":"https://apis.rcs.roblox.com/screen-time-api","thumbnailsApi":"https://thumbnails.roblox.com","tradesApi":"https://trades.roblox.com","translationRolesApi":"https://translationroles.roblox.com","universalAppConfigurationApi":"https://apis.roblox.com/universal-app-configuration","usersApi":"https://users.roblox.com","voiceApi":"https://voice.roblox.com","websiteUrl":"https://www.roblox.com","privateMessagesApi":"https://privatemessages.roblox.com"};var additionalUrls={amazonStoreLink:"https://www.amazon.com/Roblox-Corporation/dp/B00NUF4YOA",appProtocolUrl:"robloxmobile://",appStoreLink:"https://itunes.apple.com/us/app/roblox-mobile/id431946152",googlePlayStoreLink:"https://play.google.com/store/apps/details?id=com.roblox.client&amp;hl=en",iosAppStoreLink:"https://itunes.apple.com/us/app/roblox-mobile/id431946152",windowsStoreLink:"https://www.microsoft.com/en-us/store/games/roblox/9nblgggzm6wm",xboxStoreLink:"https://www.microsoft.com/en-us/p/roblox/bq1tn1t79v9k",amazonWebStoreLink:"https://www.amazon.com/roblox?&amp;_encoding=UTF8&amp;tag=r05d13-20&amp;linkCode=ur2&amp;linkId=4ba2e1ad82f781c8e8cc98329b1066d0&amp;camp=1789&amp;creative=9325"}
  710. for(var urlName in additionalUrls){Roblox.EnvironmentUrls[urlName]=additionalUrls[urlName];}</script><script>var Roblox=Roblox||{};Roblox.GaEventSettings={gaDFPPreRollEnabled:"false"==="true",gaLaunchAttemptAndLaunchSuccessEnabled:"false"==="true",gaPerformanceEventEnabled:"false"==="true"};</script><script onerror="Roblox.BundleDetector&amp;&amp;Roblox.BundleDetector.reportBundleError(this)" data-monitor="true" data-bundlename="headerinit" src="https://js.rbxcdn.com/799efe9bfd5be7618e023fc94f1b1b84.js"></script><script onerror="Roblox.BundleDetector&amp;&amp;Roblox.BundleDetector.reportBundleError(this)" data-monitor="true" data-bundlename="RealTime" src="https://js.rbxcdn.com/4cb4fa56ba675608e2cbd2f0bc7bfa932969af63bd7a87ef73cd23558b7c39e4.js"></script><script onerror="Roblox.BundleDetector&amp;&amp;Roblox.BundleDetector.reportBundleError(this)" data-monitor="true" data-bundlename="CrossTabCommunication" src="https://js.rbxcdn.com/6f451b71ad4e130aa7f8a1a91b8b6a0974f1237d4f830b8a642ad2c8f5cc05d4.js"></script><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"><script>var Roblox=Roblox||{};Roblox.AdsHelper=Roblox.AdsHelper||{};Roblox.AdsLibrary=Roblox.AdsLibrary||{};Roblox.AdsHelper.toggleAdsSlot=function(slotId,GPTRandomSlotIdentifier){var gutterAdsEnabled=false;if(gutterAdsEnabled){googletag.display(GPTRandomSlotIdentifier);return;}
  711. if(typeof slotId!=='undefined'&&slotId&&slotId.length>0){var slotElm=$("#"+slotId);if(slotElm.is(":visible")){googletag.display(GPTRandomSlotIdentifier);}else{var adParam=Roblox.AdsLibrary.adsParameters[slotId];if(adParam){adParam.template=slotElm.html();slotElm.empty();}}}}</script><script>$(function(){Roblox.JSErrorTracker.initialize({'suppressConsoleError':true});});</script><!--[if lt IE 9]><script src=//oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js></script><script src=//oss.maxcdn.com/respond/1.4.2/respond.min.js></script><![endif]--><script>var Roblox=Roblox||{};(function(){var dnt=navigator.doNotTrack||window.doNotTrack||navigator.msDoNotTrack;if(typeof window.external!=="undefined"&&typeof window.external.msTrackingProtectionEnabled!=="undefined"){dnt=dnt||window.external.msTrackingProtectionEnabled();}
  712. Roblox.browserDoNotTrack=dnt=="1"||dnt=="yes"||dnt===true;})();</script><script>if(Roblox&&Roblox.EventStream){Roblox.EventStream.Init("","","","");}</script><script>if(Roblox&&Roblox.PageHeartbeatEvent){Roblox.PageHeartbeatEvent.Init([2,8,20,60]);}</script><script>if(typeof(Roblox)==="undefined"){Roblox={};}
  713. Roblox.Endpoints=Roblox.Endpoints||{};Roblox.Endpoints.Urls=Roblox.Endpoints.Urls||{};Roblox.Endpoints.Urls['/asset/']='https://assetgame.roblox.com/asset/';Roblox.Endpoints.Urls['/client-status/set']='https://www.roblox.com/client-status/set';Roblox.Endpoints.Urls['/client-status']='https://www.roblox.com/client-status';Roblox.Endpoints.Urls['/game/']='https://assetgame.roblox.com/game/';Roblox.Endpoints.Urls['/game/edit.ashx']='https://assetgame.roblox.com/game/edit.ashx';Roblox.Endpoints.Urls['/game/placelauncher.ashx']='https://assetgame.roblox.com/game/placelauncher.ashx';Roblox.Endpoints.Urls['/game/preloader']='https://assetgame.roblox.com/game/preloader';Roblox.Endpoints.Urls['/game/report-stats']='https://assetgame.roblox.com/game/report-stats';Roblox.Endpoints.Urls['/game/report-event']='https://assetgame.roblox.com/game/report-event';Roblox.Endpoints.Urls['/game/updateprerollcount']='https://assetgame.roblox.com/game/updateprerollcount';Roblox.Endpoints.Urls['/login/default.aspx']='https://www.roblox.com/login/default.aspx';Roblox.Endpoints.Urls['/my/avatar']='https://www.roblox.com/my/avatar';Roblox.Endpoints.Urls['/my/money.aspx']='https://www.roblox.com/my/money.aspx';Roblox.Endpoints.Urls['/navigation/userdata']='https://www.roblox.com/navigation/userdata';Roblox.Endpoints.Urls['/chat/chat']='https://www.roblox.com/chat/chat';Roblox.Endpoints.Urls['/chat/data']='https://www.roblox.com/chat/data';Roblox.Endpoints.Urls['/presence/users']='https://www.roblox.com/presence/users';Roblox.Endpoints.Urls['/presence/user']='https://www.roblox.com/presence/user';Roblox.Endpoints.Urls['/friends/list']='https://www.roblox.com/friends/list';Roblox.Endpoints.Urls['/navigation/getcount']='https://www.roblox.com/navigation/getCount';Roblox.Endpoints.Urls['/regex/email']='https://www.roblox.com/regex/email';Roblox.Endpoints.Urls['/catalog/browse.aspx']='https://www.roblox.com/catalog/browse.aspx';Roblox.Endpoints.Urls['/catalog/html']='https://search.roblox.com/catalog/html';Roblox.Endpoints.Urls['/catalog/json']='https://search.roblox.com/catalog/json';Roblox.Endpoints.Urls['/catalog/contents']='https://search.roblox.com/catalog/contents';Roblox.Endpoints.Urls['/catalog/lists.aspx']='https://search.roblox.com/catalog/lists.aspx';Roblox.Endpoints.Urls['/catalog/items']='https://search.roblox.com/catalog/items';Roblox.Endpoints.Urls['/asset-hash-thumbnail/image']='https://assetgame.roblox.com/asset-hash-thumbnail/image';Roblox.Endpoints.Urls['/asset-hash-thumbnail/json']='https://assetgame.roblox.com/asset-hash-thumbnail/json';Roblox.Endpoints.Urls['/asset-thumbnail-3d/json']='https://assetgame.roblox.com/asset-thumbnail-3d/json';Roblox.Endpoints.Urls['/asset-thumbnail/image']='https://assetgame.roblox.com/asset-thumbnail/image';Roblox.Endpoints.Urls['/asset-thumbnail/json']='https://assetgame.roblox.com/asset-thumbnail/json';Roblox.Endpoints.Urls['/asset-thumbnail/url']='https://assetgame.roblox.com/asset-thumbnail/url';Roblox.Endpoints.Urls['/asset/request-thumbnail-fix']='https://assetgame.roblox.com/asset/request-thumbnail-fix';Roblox.Endpoints.Urls['/avatar-thumbnail-3d/json']='https://www.roblox.com/avatar-thumbnail-3d/json';Roblox.Endpoints.Urls['/avatar-thumbnail/image']='https://www.roblox.com/avatar-thumbnail/image';Roblox.Endpoints.Urls['/avatar-thumbnail/json']='https://www.roblox.com/avatar-thumbnail/json';Roblox.Endpoints.Urls['/avatar-thumbnails']='https://www.roblox.com/avatar-thumbnails';Roblox.Endpoints.Urls['/avatar/request-thumbnail-fix']='https://www.roblox.com/avatar/request-thumbnail-fix';Roblox.Endpoints.Urls['/bust-thumbnail/json']='https://www.roblox.com/bust-thumbnail/json';Roblox.Endpoints.Urls['/group-thumbnails']='https://www.roblox.com/group-thumbnails';Roblox.Endpoints.Urls['/groups/getprimarygroupinfo.ashx']='https://www.roblox.com/groups/getprimarygroupinfo.ashx';Roblox.Endpoints.Urls['/headshot-thumbnail/json']='https://www.roblox.com/headshot-thumbnail/json';Roblox.Endpoints.Urls['/item-thumbnails']='https://www.roblox.com/item-thumbnails';Roblox.Endpoints.Urls['/outfit-thumbnail/json']='https://www.roblox.com/outfit-thumbnail/json';Roblox.Endpoints.Urls['/place-thumbnails']='https://www.roblox.com/place-thumbnails';Roblox.Endpoints.Urls['/thumbnail/asset/']='https://www.roblox.com/thumbnail/asset/';Roblox.Endpoints.Urls['/thumbnail/avatar-headshot']='https://www.roblox.com/thumbnail/avatar-headshot';Roblox.Endpoints.Urls['/thumbnail/avatar-headshots']='https://www.roblox.com/thumbnail/avatar-headshots';Roblox.Endpoints.Urls['/thumbnail/user-avatar']='https://www.roblox.com/thumbnail/user-avatar';Roblox.Endpoints.Urls['/thumbnail/resolve-hash']='https://www.roblox.com/thumbnail/resolve-hash';Roblox.Endpoints.Urls['/thumbnail/place']='https://www.roblox.com/thumbnail/place';Roblox.Endpoints.Urls['/thumbnail/get-asset-media']='https://www.roblox.com/thumbnail/get-asset-media';Roblox.Endpoints.Urls['/thumbnail/remove-asset-media']='https://www.roblox.com/thumbnail/remove-asset-media';Roblox.Endpoints.Urls['/thumbnail/set-asset-media-sort-order']='https://www.roblox.com/thumbnail/set-asset-media-sort-order';Roblox.Endpoints.Urls['/thumbnail/place-thumbnails']='https://www.roblox.com/thumbnail/place-thumbnails';Roblox.Endpoints.Urls['/thumbnail/place-thumbnails-partial']='https://www.roblox.com/thumbnail/place-thumbnails-partial';Roblox.Endpoints.Urls['/thumbnail_holder/g']='https://www.roblox.com/thumbnail_holder/g';Roblox.Endpoints.Urls['/users/{id}/profile']='https://www.roblox.com/users/{id}/profile';Roblox.Endpoints.Urls['/service-workers/push-notifications']='https://www.roblox.com/service-workers/push-notifications';Roblox.Endpoints.Urls['/notification-stream/notification-stream-data']='https://www.roblox.com/notification-stream/notification-stream-data';Roblox.Endpoints.Urls['/api/friends/acceptfriendrequest']='https://www.roblox.com/api/friends/acceptfriendrequest';Roblox.Endpoints.Urls['/api/friends/declinefriendrequest']='https://www.roblox.com/api/friends/declinefriendrequest';Roblox.Endpoints.Urls['/authentication/is-logged-in']='https://www.roblox.com/authentication/is-logged-in';Roblox.Endpoints.addCrossDomainOptionsToAllRequests=true;</script><script>if(typeof(Roblox)==="undefined"){Roblox={};}
  714. Roblox.Endpoints=Roblox.Endpoints||{};Roblox.Endpoints.Urls=Roblox.Endpoints.Urls||{};</script><script>Roblox=Roblox||{};Roblox.AbuseReportPVMeta={desktopEnabled:true,phoneEnabled:false,inAppEnabled:false};</script><style type="text/css"></style></head><body id="rbx-body" class="rbx-body dark-theme gotham-font btr-no-hamburger btr-hide-ads btr-small-chat-button" data-performance-relative-value="0.005" data-internal-page-name="Home" data-send-event-percentage="0" data-btr-page="home"><div id="roblox-linkify" data-enabled="true" data-regex="(https?:\/\/)?([a-z0-9-]+\.)*(twitter\.com|youtube\.com|youtu\.be|twitch\.tv|roblox\.com|robloxlabs\.com|shoproblox\.com)(?!\/[A-Za-z0-9-+&amp;@#/=~_|!:,.;]*%)((\/[A-Za-z0-9-+&amp;@#/%?=~_|!:,.;]*)|(?=\s|\b))" data-regex-flags="gm" data-as-http-regex="(([^.]help|polls)\.roblox\.com)"></div><div id="image-retry-data" data-image-retry-max-times="10" data-image-retry-timer="1500" data-ga-logging-percent="10"></div><div id="http-retry-data" data-http-retry-max-timeout="0" data-http-retry-base-timeout="0" data-http-retry-max-times="1"></div><div id="TosAgreementInfo" data-terms-check-needed="False"></div><div id="fb-root"></div><div id="wrap" class="wrap no-gutter-ads logged-in" data-gutter-ads-enabled="false"><div id="header" class="navbar-fixed-top rbx-header dark-theme gotham-font" data-isauthenticated="true" role="navigation"><div class="container-fluid btr-custom-header"><div class="btr-header-flex"><div class="rbx-navbar-header"><div data-behavior="nav-notification" class="rbx-nav-collapse" onselectstart="return false"><span class="icon-nav-menu"></span></div><div class="navbar-header"><a class="navbar-brand" href="https://www.roblox.com/"> <span class="icon-logo"></span> <span class="icon-logo-r"></span> </a></div></div><ul class="nav rbx-navbar hidden-xs hidden-sm col-md-5 col-lg-4"><li class="cursor-pointer"><a class="font-header-2 nav-menu-title text-header" href="/home">Home</a></li><li class="cursor-pointer"><a class="font-header-2 nav-menu-title text-header" href="https://www.roblox.com/games">Games</a></li><li class="cursor-pointer"><a class="font-header-2 nav-menu-title text-header" href="https://www.roblox.com/catalog/">Avatar Shop</a></li><li class="cursor-pointer"><a class="font-header-2 nav-menu-title text-header" href="https://www.roblox.com/develop">Create</a></li><li class="cursor-pointer btr-nav-disabled"><a class="font-header-2 buy-robux nav-menu-title text-header" href="https://www.roblox.com/upgrades/robux?ctx=nav">Robux</a></li></ul><div id="navbar-universal-search" class="navbar-left rbx-navbar-search col-xs-5 col-sm-6 col-md-2 col-lg-3" data-behavior="univeral-search" role="search"><div class="input-group"><input id="navbar-search-input" class="form-control input-field" type="text" placeholder="Search" maxlength="120"><div class="input-group-btn"><button id="navbar-search-btn" class="input-addon-btn" type="submit"> <span class="icon-nav-search"></span> </button></div></div><ul data-toggle="dropdown-menu" class="dropdown-menu" role="menu"><li class="rbx-navbar-search-option rbx-clickable-li selected" data-searchurl="https://www.roblox.com/games/?Keyword="><a class="rbx-navbar-search-anchor" href="https://www.roblox.com/games/?Keyword="> <span class="rbx-navbar-search-text"> Search "<span class="rbx-navbar-search-string"></span>" in Games</span> </a></li><li class="rbx-navbar-search-option rbx-clickable-li" data-searchurl="https://www.roblox.com/search/users?keyword="><a class="rbx-navbar-search-anchor" href="https://www.roblox.com/search/users?keyword="> <span class="rbx-navbar-search-text"> Search "<span class="rbx-navbar-search-string"></span>" in Players</span> </a></li><li class="rbx-navbar-search-option rbx-clickable-li" data-searchurl="https://www.roblox.com/catalog/browse.aspx?CatalogContext=1&amp;Keyword="><a class="rbx-navbar-search-anchor" href="https://www.roblox.com/catalog/browse.aspx?CatalogContext=1&amp;Keyword="> <span class="rbx-navbar-search-text"> Search "<span class="rbx-navbar-search-string"></span>" in Catalog</span> </a></li><li class="rbx-navbar-search-option rbx-clickable-li" data-searchurl="https://www.roblox.com/search/groups?keyword="><a class="rbx-navbar-search-anchor" href="https://www.roblox.com/search/groups?keyword="> <span class="rbx-navbar-search-text"> Search "<span class="rbx-navbar-search-string"></span>" in Groups</span> </a></li><li class="rbx-navbar-search-option rbx-clickable-li" data-searchurl="https://www.roblox.com/develop/library?CatalogContext=2&amp;Category=6&amp;Keyword="><a class="rbx-navbar-search-anchor" href="https://www.roblox.com/develop/library?CatalogContext=2&amp;Category=6&amp;Keyword="> <span class="rbx-navbar-search-text"> Search "<span class="rbx-navbar-search-string"></span>" in Library</span> </a></li></ul></div><div class="navbar-right rbx-navbar-right"><ul class="nav navbar-right rbx-navbar-icon-group"><li id="navbar-setting" class="navbar-icon-item"><a class="rbx-menu-item roblox-popover-close" data-toggle="popover" data-bind="popover-setting" data-viewport="#header" data-original-title="" title=""> <span class="icon-nav-settings roblox-popover-close" id="nav-settings"></span> <span class="notification-red notification nav-setting-highlight hidden">0</span> </a><div class="rbx-popover-content" data-toggle="popover-setting"><ul class="dropdown-menu" role="menu"><li><a class="rbx-menu-item btr-settings-toggle">BTR Settings</a></li><li><a class="rbx-menu-item" href="https://www.roblox.com/my/account"> Settings <span class="notification-blue notification nav-setting-highlight hidden">0</span> </a></li><li><a class="rbx-menu-item" href="https://www.roblox.com/info/help?locale=en_us" target="_blank">Help</a></li><li><a class="rbx-menu-item" data-behavior="logout" data-bind="https://auth.roblox.com/v2/logout">Logout</a></li></ul></div></li><li id="navbar-robux" class="navbar-icon-item"><a id="nav-robux-icon" class="nav-robux-icon rbx-menu-item" data-toggle="popover" data-bind="popover-robux" data-original-title="" title=""> <span class="icon-robux-28x28 roblox-popover-close" id="nav-robux"></span> <span class="rbx-text-navbar-right text-header" id="nav-robux-amount">100B+</span> </a><div class="rbx-popover-content" data-toggle="popover-robux"><ul class="dropdown-menu" role="menu"><li><a href="https://www.roblox.com/My/Money.aspx#/#Summary_tab" id="nav-robux-balance" class="rbx-menu-item">100,532,422,231 Robux</a></li><li><a href="/develop/developer-exchange" class="rbx-menu-item">$1,255,398,622.61 USD</a></li><li><a href="https://www.roblox.com/upgrades/robux?ctx=navpopover" class="rbx-menu-item">Buy Robux</a></li></ul></div></li><li id="btr-navbar-messages" class="navbar-icon-item"><a class="rbx-menu-item" href="https://www.roblox.com/my/messages/#!/inbox"><span class="icon-nav-message-btr"></span><span class="btr-nav-notif rbx-text-navbar-right" style="">5</span></a></li><li id="btr-navbar-friends" class="navbar-icon-item"><a class="rbx-menu-item" href="https://www.roblox.com/users/friends"><span class="icon-nav-friend-btr"></span><span class="btr-nav-notif rbx-text-navbar-right" style="display:none;">0</span></a></li><li class="navbar-icon-item navbar-stream"><div class="notification-stream" ng-class="{'inApp': library.inApp}" id="notification-stream-icon-container" notification-stream-icon=""> <a id="nav-ns-icon" class="roblox-popover rbx-menu-item notification-stream-icon" data-bind="notification-stream-base" data-container="notification-stream-container" notification-indicator=""> <span class="icon-nav-notification-stream" id="nav-notifications"></span> <span class="notification-red notification ng-binding" ng-show="layout.unreadNotifications > 0 &amp;&amp; (!layout.isNotificationContentOpen)"> 2 </span> </a> </div></li><li class="rbx-navbar-right-search" data-toggle="toggle-search"><a class="rbx-menu-icon rbx-menu-item"> <span class="icon-nav-search-white"></span> </a></li></ul><div class="xsmall age-bracket-label text-header btr-nav-disabled"><span class="age-bracket-label-username font-caption-header">builderman: </span>13+</div></div></div><ul class="nav rbx-navbar hidden-md hidden-lg col-xs-12"><li class="cursor-pointer"><a class="font-header-2 nav-menu-title text-header" href="/home">Home</a></li><li class="cursor-pointer"><a class="font-header-2 nav-menu-title text-header" href="https://www.roblox.com/games">Games</a></li><li class="cursor-pointer"><a class="font-header-2 nav-menu-title text-header" href="https://www.roblox.com/catalog/">Avatar Shop</a></li><li class="cursor-pointer"><a class="font-header-2 nav-menu-title text-header" href="https://www.roblox.com/develop">Create</a></li><li class="cursor-pointer btr-nav-disabled"><a class="font-header-2 buy-robux nav-menu-title text-header" href="https://www.roblox.com/upgrades/robux?ctx=nav">Robux</a></li></ul></div></div><div id="navigation" class="rbx-left-col dark-theme gotham-font" data-behavior="left-col"><ul><li class="text-lead"><a class="text-nav font-header-2 text-overflow" href="https://www.roblox.com/users/1253745616/profile">builderman</a></li><li class="rbx-divider"></li></ul><div class="rbx-scrollbar mCustomScrollbar _mCS_1 mCS_no_scrollbar" data-toggle="scrollbar" onselectstart="return false"><div id="mCSB_1" class="mCustomScrollBox mCS-light mCSB_vertical mCSB_inside" tabindex="0" style="max-height: 0px;"><div id="mCSB_1_container" class="mCSB_container" style="position:relative; top:0; left:0;" dir="ltr"><ul class="left-col-list"><li><a href="https://www.roblox.com/home" id="nav-home" class="dynamic-overflow-container text-nav"><div><span class="icon-nav-home"></span></div><span class="font-header-2 dynamic-ellipsis-item">Home</span> </a></li><li><a href="https://www.roblox.com/users/1253745616/profile" id="nav-profile" class="dynamic-overflow-container text-nav"><div><span class="icon-nav-profile"></span></div><span class="font-header-2 dynamic-ellipsis-item">Profile</span> </a></li><li id="navigation-messages" class="btr-nav-disabled"><a href="https://www.roblox.com/my/messages/#!/inbox" id="nav-message" data-count="5" class="dynamic-overflow-container text-nav"><div><span class="icon-nav-message"></span></div><span class="font-header-2 dynamic-ellipsis-item" title="Messages">Messages</span><div class="dynamic-width-item align-right"><span class="notification-blue notification" title="5">5</span></div></a></li><li id="navigation-friends" class="btr-nav-disabled"><a href="https://www.roblox.com/users/friends" id="nav-friends" data-count="0" class="dynamic-overflow-container text-nav"><div><span class="icon-nav-friends"></span></div><span class="font-header-2 dynamic-ellipsis-item" title="Friends">Friends</span><div class="dynamic-width-item align-right"><span class="notification-blue notification hide" title="0"></span></div></a></li><li><a href="https://www.roblox.com/my/avatar" id="nav-character" class="dynamic-overflow-container text-nav"><div><span class="icon-nav-charactercustomizer"></span></div><span class="font-header-2 dynamic-width-item">Avatar</span> </a></li><li><a href="https://www.roblox.com/users/1253745616/inventory" id="nav-inventory" class="dynamic-overflow-container text-nav"><div><span class="icon-nav-inventory"></span></div><span class="font-header-2 dynamic-width-item">Inventory</span> </a></li><li class="btr-nav-disabled"><a href="https://www.roblox.com/my/money.aspx#/#TradeItems_tab" id="nav-trade" class="dynamic-overflow-container text-nav" data-count="0"><div><span class="icon-nav-trade"></span></div><span class="font-header-2 dynamic-ellipsis-item">Trade</span><div class="dynamic-width-item align-right"><span class="notification-blue notification hide" title="0"></span></div></a></li><li><a href="https://www.roblox.com/my/money.aspx" class="dynamic-overflow-container text-nav"><div><span class="icon-nav-trade"></span></div><span class="font-header-2 dynamic-ellipsis-item">Money</span></a></li><li><a href="https://www.roblox.com/my/groups" id="nav-group" class="dynamic-overflow-container text-nav"><div><span class="icon-nav-group"></span></div><span class="font-header-2 dynamic-ellipsis-item">Groups</span> </a></li><li><a href="https://www.roblox.com/feeds/" id="nav-my-feed" class="dynamic-overflow-container text-nav"><div><span class="icon-nav-my-feed"></span></div><span class="font-header-2 dynamic-ellipsis-item">My Feed</span> </a></li><li><a href="/premium/membership" id="nav-premium" class="dynamic-overflow-container text-nav"><div><span class="icon-nav-premium-btr"></span></div><span class="font-header-2 dynamic-ellipsis-item">Premium</span></a></li><li><a href="https://blog.roblox.com" id="nav-blog" class="dynamic-overflow-container text-nav"><div><span class="icon-nav-blog"></span></div><span class="font-header-2 dynamic-ellipsis-item">Blog</span> </a></li><li id="btr-blogfeed"><a class="btr-feed" href="https://blog.roblox.com/2020/01/mobile-avatar-editor-gets-makeover/"><div class="btr-feedtitle">The Mobile Avatar Editor Gets a Makeover <span class="btr-feeddate">(1 week ago)</span></div><div class="btr-feeddesc">Even the avatar editor needs a new look. See what’s new on iOS and Android mobile devices!</div></a><a class="btr-feed" href="https://blog.roblox.com/2020/01/2019-year-review/"><div class="btr-feedtitle">2019 Year-in-Review <span class="btr-feeddate">(2 weeks ago)</span></div><div class="btr-feeddesc">A look back at the milestones and highlights of 2019 with our founder and CEO, David Baszucki.</div></a><a class="btr-feed" href="https://blog.roblox.com/2019/12/help-kids-teens-get-holiday-game-time/"><div class="btr-feedtitle">Help Kids &amp; Teens Get the Most Out of Their Holiday Game Time <span class="btr-feeddate">(1 month ago)</span></div><div class="btr-feeddesc">Game time is a wonderful opportunity to bond with your family. Learn, play, and share together by taking the Roblox Holiday Challenge.</div></a></li><li><a id="nav-shop" class="dynamic-overflow-container text-nav roblox-shop-interstitial"><div><span class="icon-nav-shop"></span></div><span class="font-header-2 dynamic-ellipsis-item">Merchandise</span> </a></li><li class="rbx-upgrade-now btr-nav-disabled"><a href="https://www.roblox.com/premium/membership?ctx=leftnav" class="btn-growth-md btn-secondary-md" id="upgrade-now-button">Upgrade Now</a></li></ul></div><div id="mCSB_1_scrollbar_vertical" class="mCSB_scrollTools mCSB_1_scrollbar mCS-light mCSB_scrollTools_vertical" style="display: block;"><div class="mCSB_draggerContainer"><div id="mCSB_1_dragger_vertical" class="mCSB_dragger" style="position: absolute; min-height: 30px; display: block; height: 0px; max-height: 1213px; top: 0px;" oncontextmenu="return false;"><div class="mCSB_dragger_bar" style="line-height: 30px;"></div></div><div class="mCSB_draggerRail"></div></div></div></div></div></div><div id="i18nForAmazonShopSwitch" data-is-i18n-enabled-for-shop-amazon-dialog="true" data-amazon-store-url="https://www.amazon.com/roblox?&amp;_encoding=UTF8&amp;tag=r05d13-20&amp;linkCode=ur2&amp;linkId=4ba2e1ad82f781c8e8cc98329b1066d0&amp;camp=1789&amp;creative=9325" style="display:none"></div><script>var Roblox=Roblox||{};(function(){if(Roblox&&Roblox.Performance){Roblox.Performance.setPerformanceMark("navigation_end");}})();</script><div class="container-main" id="container-main"><script>if(top.location!=self.location){top.location=self.location.href;}</script><div class="alert-container"><noscript><div><div class="alert-info" role="alert">Please enable Javascript to use all the features on this site.</div></div></noscript></div><div class="content"><div id="Skyscraper-Abp-Left" class="abp abp-container left-abp"></div><div id="HomeContainer" class="row home-container"><div class="col-xs-12 home-header"><a href="https://www.roblox.com/users/1253745616/profile" class="avatar avatar-headshot-lg"> <img alt="avatar" src="https://tr.rbxcdn.com/6f08ebb818599331f12000cdf49fcfb0/150/150/AvatarHeadshot/Png" id="home-avatar-thumb" class="avatar-card-image"> </a><div class="home-header-content"><h1><span class="icon-premium-medium"></span>
  715. <a href="https://www.roblox.com/users/1253745616/profile">builderman</a></h1></div></div><div ng-controller="peopleListContainerController" id="people-list-container" people-list-container=""> <div class="col-xs-12 people-list-container" ng-show="layout.isAllFriendsDataLoaded &amp;&amp; library.numOfFriends > 0"> <div class="section home-friends"> <div class="container-header people-list-header"> <h3 class="ng-binding">Friends<span ng-show="library.numOfFriends !== null" class="friends-count ng-binding">(0)</span></h3> </div> <div class="section-content remove-panel people-list"> <ul class="hlist" ng-controller="friendsListController" people-list="" ng-class="{'invisible': !layout.isAllFriendsDataLoaded}"> <!-- ngRepeat: friend in library.friendsDict | orderList: library.friendIds | limitTo: layout.maxNumberOfFriendsDisplayed --><!-- end ngRepeat: friend in library.friendsDict | orderList: library.friendIds | limitTo: layout.maxNumberOfFriendsDisplayed --> </ul> <span class="spinner spinner-default ng-hide" ng-show="!layout.isAllFriendsDataLoaded"></span> </div> </div> </div> <div class="col-xs-12 people-list-container ng-hide" ng-hide="layout.isAllFriendsDataLoaded"> <div class="section home-friends"> <div class="container-header people-list-header"> <h3 class="ng-binding">Friends</h3> </div> <div class="section-content remove-panel people-list"> <span class="spinner spinner-default"></span> </div> </div> </div> </div><div id="places-list-container" ng-hide="isPlacesListNotAvailable" class="ng-scope"><div class="col-xs-12 container-list places-list-placeholder ng-hide" ng-hide="isPlacesListLoaded"><span class="spinner spinner-default"></span></div><div places-list-container=""> <!-- ngRepeat: name in library.sortNames --><!-- ngIf: library.placesList[name] && library.placesList[name].games.length > 0 --><div class="col-xs-12 container-list places-list ng-scope" ng-class="{'realtime-places-list': library.placesList[name].numberOfGames > layout.maxNumberOfGamesInList, 'large-game-tile-list': isLargeGameTileEnabled(name)}" ng-repeat="name in library.sortNames" ng-if="library.placesList[name] &amp;&amp; library.placesList[name].games.length > 0" ng-controller="placeListContainerController"> <div class="container-header"> <h3 class="ng-binding">Continue Playing</h3> </div> <!-- ngIf: isLargeGameTileEnabled(name) --> <!-- ngIf: !isLargeGameTileEnabled(name) --><ul ng-if="!isLargeGameTileEnabled(name)" class="hlist game-cards ng-scope" ng-class="{'card-grid': library.placesList[name].numberOfGames > layout.maxNumberOfGamesInList}"> <!-- ngRepeat: game in library.placesList[name].games | limitTo: library.placesList[name].numberOfGames --><!-- ngIf: !library.isAvatarInPlacesListEnabled --><!-- end ngRepeat: game in library.placesList[name].games | limitTo: library.placesList[name].numberOfGames --><!-- ngIf: !library.isAvatarInPlacesListEnabled --><!-- end ngRepeat: game in library.placesList[name].games | limitTo: library.placesList[name].numberOfGames --><!-- ngIf: !library.isAvatarInPlacesListEnabled --><!-- end ngRepeat: game in library.placesList[name].games | limitTo: library.placesList[name].numberOfGames --><!-- ngIf: !library.isAvatarInPlacesListEnabled --><!-- end ngRepeat: game in library.placesList[name].games | limitTo: library.placesList[name].numberOfGames --><!-- ngIf: !library.isAvatarInPlacesListEnabled --><!-- end ngRepeat: game in library.placesList[name].games | limitTo: library.placesList[name].numberOfGames --><!-- ngIf: !library.isAvatarInPlacesListEnabled --><!-- end ngRepeat: game in library.placesList[name].games | limitTo: library.placesList[name].numberOfGames --> <!-- ngRepeat: game in library.placesList[name].games | limitTo: library.placesList[name].numberOfGames --><!-- ngIf: library.isAvatarInPlacesListEnabled --><!-- end ngIf: library.isAvatarInPlacesListEnabled --><!-- end ngRepeat: game in library.placesList[name].games | limitTo: library.placesList[name].numberOfGames --><!-- ngIf: library.isAvatarInPlacesListEnabled --><!-- end ngIf: library.isAvatarInPlacesListEnabled --><!-- end ngRepeat: game in library.placesList[name].games | limitTo: library.placesList[name].numberOfGames --><!-- ngIf: library.isAvatarInPlacesListEnabled --><!-- end ngIf: library.isAvatarInPlacesListEnabled --><!-- end ngRepeat: game in library.placesList[name].games | limitTo: library.placesList[name].numberOfGames --><!-- ngIf: library.isAvatarInPlacesListEnabled --><!-- end ngIf: library.isAvatarInPlacesListEnabled --><!-- end ngRepeat: game in library.placesList[name].games | limitTo: library.placesList[name].numberOfGames --><!-- ngIf: library.isAvatarInPlacesListEnabled --><!-- end ngIf: library.isAvatarInPlacesListEnabled --><!-- end ngRepeat: game in library.placesList[name].games | limitTo: library.placesList[name].numberOfGames --><!-- ngIf: library.isAvatarInPlacesListEnabled --><!-- end ngIf: library.isAvatarInPlacesListEnabled --><!-- end ngRepeat: game in library.placesList[name].games | limitTo: library.placesList[name].numberOfGames --> </ul><!-- end ngIf: !isLargeGameTileEnabled(name) --> </div><!-- end ngIf: library.placesList[name] && library.placesList[name].games.length > 0 --><!-- end ngRepeat: name in library.sortNames --><!-- ngIf: library.placesList[name] && library.placesList[name].games.length > 0 --><div class="col-xs-12 container-list places-list ng-scope" ng-class="{'realtime-places-list': library.placesList[name].numberOfGames > layout.maxNumberOfGamesInList, 'large-game-tile-list': isLargeGameTileEnabled(name)}" ng-repeat="name in library.sortNames" ng-if="library.placesList[name] &amp;&amp; library.placesList[name].games.length > 0" ng-controller="placeListContainerController"> <div class="container-header"> <h3 class="ng-binding">Favorites</h3> </div> <!-- ngIf: isLargeGameTileEnabled(name) --> <!-- ngIf: !isLargeGameTileEnabled(name) --><ul ng-if="!isLargeGameTileEnabled(name)" class="hlist game-cards ng-scope" ng-class="{'card-grid': library.placesList[name].numberOfGames > layout.maxNumberOfGamesInList}"> <!-- ngRepeat: game in library.placesList[name].games | limitTo: library.placesList[name].numberOfGames --><!-- ngIf: !library.isAvatarInPlacesListEnabled --><!-- end ngRepeat: game in library.placesList[name].games | limitTo: library.placesList[name].numberOfGames --><!-- ngIf: !library.isAvatarInPlacesListEnabled --><!-- end ngRepeat: game in library.placesList[name].games | limitTo: library.placesList[name].numberOfGames --><!-- ngIf: !library.isAvatarInPlacesListEnabled --><!-- end ngRepeat: game in library.placesList[name].games | limitTo: library.placesList[name].numberOfGames --> <!-- ngRepeat: game in library.placesList[name].games | limitTo: library.placesList[name].numberOfGames --><!-- ngIf: library.isAvatarInPlacesListEnabled --><!-- end ngIf: library.isAvatarInPlacesListEnabled --><!-- end ngRepeat: game in library.placesList[name].games | limitTo: library.placesList[name].numberOfGames --><!-- ngIf: library.isAvatarInPlacesListEnabled --><!-- end ngIf: library.isAvatarInPlacesListEnabled --><!-- end ngRepeat: game in library.placesList[name].games | limitTo: library.placesList[name].numberOfGames --><!-- ngIf: library.isAvatarInPlacesListEnabled --><!-- end ngIf: library.isAvatarInPlacesListEnabled --><!-- end ngRepeat: game in library.placesList[name].games | limitTo: library.placesList[name].numberOfGames --> </ul><!-- end ngIf: !isLargeGameTileEnabled(name) --> </div><!-- end ngIf: library.placesList[name] && library.placesList[name].games.length > 0 --><!-- end ngRepeat: name in library.sortNames --><!-- ngIf: library.placesList[name] && library.placesList[name].games.length > 0 --><div class="col-xs-12 container-list places-list ng-scope" ng-class="{'realtime-places-list': library.placesList[name].numberOfGames > layout.maxNumberOfGamesInList, 'large-game-tile-list': isLargeGameTileEnabled(name)}" ng-repeat="name in library.sortNames" ng-if="library.placesList[name] &amp;&amp; library.placesList[name].games.length > 0" ng-controller="placeListContainerController"> <div class="container-header"> <h3 class="ng-binding">Friends Playing</h3> </div> <!-- ngIf: isLargeGameTileEnabled(name) --> <!-- ngIf: !isLargeGameTileEnabled(name) --><ul ng-if="!isLargeGameTileEnabled(name)" class="hlist game-cards ng-scope" ng-class="{'card-grid': library.placesList[name].numberOfGames > layout.maxNumberOfGamesInList}"> <!-- ngRepeat: game in library.placesList[name].games | limitTo: library.placesList[name].numberOfGames --><!-- ngIf: !library.isAvatarInPlacesListEnabled --><!-- end ngRepeat: game in library.placesList[name].games | limitTo: library.placesList[name].numberOfGames --><!-- ngIf: !library.isAvatarInPlacesListEnabled --><!-- end ngRepeat: game in library.placesList[name].games | limitTo: library.placesList[name].numberOfGames --><!-- ngIf: !library.isAvatarInPlacesListEnabled --><!-- end ngRepeat: game in library.placesList[name].games | limitTo: library.placesList[name].numberOfGames --><!-- ngIf: !library.isAvatarInPlacesListEnabled --><!-- end ngRepeat: game in library.placesList[name].games | limitTo: library.placesList[name].numberOfGames --><!-- ngIf: !library.isAvatarInPlacesListEnabled --><!-- end ngRepeat: game in library.placesList[name].games | limitTo: library.placesList[name].numberOfGames --><!-- ngIf: !library.isAvatarInPlacesListEnabled --><!-- end ngRepeat: game in library.placesList[name].games | limitTo: library.placesList[name].numberOfGames --> <!-- ngRepeat: game in library.placesList[name].games | limitTo: library.placesList[name].numberOfGames --><!-- ngIf: library.isAvatarInPlacesListEnabled --><!-- end ngIf: library.isAvatarInPlacesListEnabled --><!-- end ngRepeat: game in library.placesList[name].games | limitTo: library.placesList[name].numberOfGames --><!-- ngIf: library.isAvatarInPlacesListEnabled --><!-- end ngIf: library.isAvatarInPlacesListEnabled --><!-- end ngRepeat: game in library.placesList[name].games | limitTo: library.placesList[name].numberOfGames --><!-- ngIf: library.isAvatarInPlacesListEnabled --><!-- end ngIf: library.isAvatarInPlacesListEnabled --><!-- end ngRepeat: game in library.placesList[name].games | limitTo: library.placesList[name].numberOfGames --><!-- ngIf: library.isAvatarInPlacesListEnabled --><!-- end ngIf: library.isAvatarInPlacesListEnabled --><!-- end ngRepeat: game in library.placesList[name].games | limitTo: library.placesList[name].numberOfGames --><!-- ngIf: library.isAvatarInPlacesListEnabled --><!-- end ngIf: library.isAvatarInPlacesListEnabled --><!-- end ngRepeat: game in library.placesList[name].games | limitTo: library.placesList[name].numberOfGames --><!-- ngIf: library.isAvatarInPlacesListEnabled --><!-- end ngIf: library.isAvatarInPlacesListEnabled --><!-- end ngRepeat: game in library.placesList[name].games | limitTo: library.placesList[name].numberOfGames --> </ul><!-- end ngIf: !isLargeGameTileEnabled(name) --> </div><!-- end ngIf: library.placesList[name] && library.placesList[name].games.length > 0 --><!-- end ngRepeat: name in library.sortNames --><!-- ngIf: library.placesList[name] && library.placesList[name].games.length > 0 --><div class="col-xs-12 container-list places-list ng-scope" ng-class="{'realtime-places-list': library.placesList[name].numberOfGames > layout.maxNumberOfGamesInList, 'large-game-tile-list': isLargeGameTileEnabled(name)}" ng-repeat="name in library.sortNames" ng-if="library.placesList[name] &amp;&amp; library.placesList[name].games.length > 0" ng-controller="placeListContainerController"> <div class="container-header"> <h3 class="ng-binding">Recommended</h3> </div> <!-- ngIf: isLargeGameTileEnabled(name) --> <!-- ngIf: !isLargeGameTileEnabled(name) --><ul ng-if="!isLargeGameTileEnabled(name)" class="hlist game-cards ng-scope" ng-class="{'card-grid': library.placesList[name].numberOfGames > layout.maxNumberOfGamesInList}"> <!-- ngRepeat: game in library.placesList[name].games | limitTo: library.placesList[name].numberOfGames --><!-- ngIf: !library.isAvatarInPlacesListEnabled --><!-- end ngRepeat: game in library.placesList[name].games | limitTo: library.placesList[name].numberOfGames --><!-- ngIf: !library.isAvatarInPlacesListEnabled --><!-- end ngRepeat: game in library.placesList[name].games | limitTo: library.placesList[name].numberOfGames --><!-- ngIf: !library.isAvatarInPlacesListEnabled --><!-- end ngRepeat: game in library.placesList[name].games | limitTo: library.placesList[name].numberOfGames --><!-- ngIf: !library.isAvatarInPlacesListEnabled --><!-- end ngRepeat: game in library.placesList[name].games | limitTo: library.placesList[name].numberOfGames --><!-- ngIf: !library.isAvatarInPlacesListEnabled --><!-- end ngRepeat: game in library.placesList[name].games | limitTo: library.placesList[name].numberOfGames --><!-- ngIf: !library.isAvatarInPlacesListEnabled --><!-- end ngRepeat: game in library.placesList[name].games | limitTo: library.placesList[name].numberOfGames --> <!-- ngRepeat: game in library.placesList[name].games | limitTo: library.placesList[name].numberOfGames --><!-- ngIf: library.isAvatarInPlacesListEnabled --><!-- end ngIf: library.isAvatarInPlacesListEnabled --><!-- end ngRepeat: game in library.placesList[name].games | limitTo: library.placesList[name].numberOfGames --><!-- ngIf: library.isAvatarInPlacesListEnabled --><!-- end ngIf: library.isAvatarInPlacesListEnabled --><!-- end ngRepeat: game in library.placesList[name].games | limitTo: library.placesList[name].numberOfGames --><!-- ngIf: library.isAvatarInPlacesListEnabled --><!-- end ngIf: library.isAvatarInPlacesListEnabled --><!-- end ngRepeat: game in library.placesList[name].games | limitTo: library.placesList[name].numberOfGames --><!-- ngIf: library.isAvatarInPlacesListEnabled --><!-- end ngIf: library.isAvatarInPlacesListEnabled --><!-- end ngRepeat: game in library.placesList[name].games | limitTo: library.placesList[name].numberOfGames --><!-- ngIf: library.isAvatarInPlacesListEnabled --><!-- end ngIf: library.isAvatarInPlacesListEnabled --><!-- end ngRepeat: game in library.placesList[name].games | limitTo: library.placesList[name].numberOfGames --><!-- ngIf: library.isAvatarInPlacesListEnabled --><!-- end ngIf: library.isAvatarInPlacesListEnabled --><!-- end ngRepeat: game in library.placesList[name].games | limitTo: library.placesList[name].numberOfGames --> </ul><!-- end ngIf: !isLargeGameTileEnabled(name) --> </div><!-- end ngIf: library.placesList[name] && library.placesList[name].games.length > 0 --><!-- end ngRepeat: name in library.sortNames --> </div></div></div><div id="Skyscraper-Abp-Right" class="abp abp-container right-abp"></div></div></div><footer class="container-footer" id="footer-container"><div class="footer"><ul class="row footer-links"><li class="footer-link"><a class="text-footer-nav" href="/info/about-us?locale=en_us" target="_blank">About Us</a></li><li class="footer-link"><a class="text-footer-nav" href="/info/jobs?locale=en_us" target="_blank">Jobs</a></li><li class="footer-link"><a class="text-footer-nav" href="/info/blog?locale=en_us" target="_blank">Blog</a></li><li class="footer-link"><a class="text-footer-nav" href="/info/parents?locale=en_us" target="_blank">Parents</a></li><li class="footer-link"><a class="text-footer-nav" href="/info/help?locale=en_us" target="_blank">Help</a></li><li class="footer-link"><a class="text-footer-nav" href="/info/terms?locale=en_us" target="_blank">Terms</a></li><li class="footer-link"><a class="text-footer-nav privacy" href="/info/privacy?locale=en_us" target="_blank">Privacy</a></li></ul><div class="row copyright-container"><div class="col-sm-6 col-md-3"><div class="language-selector-wrapper"><div class="input-group-btn dropdown btn-group"><button id="language-switcher" role="button" aria-haspopup="true" aria-expanded="false" type="button" class="input-dropdown-btn dropdown-toggle btn btn-default"><span class="dropdown-icon icon-globe"></span><span class="rbx-selection-label">English</span><span class="icon-down-16x16"></span></button><ul role="menu" class="dropdown-menu" aria-labelledby="language-switcher"><li role="presentation" class=""><a role="menuitem" tabindex="-1" href="#">Deutsch</a></li><li role="presentation" class=""><a role="menuitem" tabindex="-1" href="#">English</a></li><li role="presentation" class=""><a role="menuitem" tabindex="-1" href="#">Español</a></li><li role="presentation" class=""><a role="menuitem" tabindex="-1" href="#">Français</a></li><li role="presentation" class=""><a role="menuitem" tabindex="-1" href="#">Português (Brasil)</a></li><li role="presentation" class=""><a role="menuitem" tabindex="-1" href="#">中文(简体)</a></li><li role="presentation" class=""><a role="menuitem" tabindex="-1" href="#">中文(繁體)</a></li><li role="presentation" class=""><a role="menuitem" tabindex="-1" href="#">日本語</a></li><li role="presentation" class=""><a role="menuitem" tabindex="-1" href="#">한국어</a></li><li role="presentation" class=""><a role="menuitem" tabindex="-1" href="#">Bahasa Indonesia*</a></li><li role="presentation" class=""><a role="menuitem" tabindex="-1" href="#">Bahasa Melayu*</a></li><li role="presentation" class=""><a role="menuitem" tabindex="-1" href="#">Bokmål*</a></li><li role="presentation" class=""><a role="menuitem" tabindex="-1" href="#">Cрпски*</a></li><li role="presentation" class=""><a role="menuitem" tabindex="-1" href="#">Dansk*</a></li><li role="presentation" class=""><a role="menuitem" tabindex="-1" href="#">Eesti*</a></li><li role="presentation" class=""><a role="menuitem" tabindex="-1" href="#">Filipino*</a></li><li role="presentation" class=""><a role="menuitem" tabindex="-1" href="#">Hrvatski*</a></li><li role="presentation" class=""><a role="menuitem" tabindex="-1" href="#">Italiano*</a></li><li role="presentation" class=""><a role="menuitem" tabindex="-1" href="#">Latviešu*</a></li><li role="presentation" class=""><a role="menuitem" tabindex="-1" href="#">Lietuvių*</a></li><li role="presentation" class=""><a role="menuitem" tabindex="-1" href="#">Magyar*</a></li><li role="presentation" class=""><a role="menuitem" tabindex="-1" href="#">Nederlands*</a></li><li role="presentation" class=""><a role="menuitem" tabindex="-1" href="#">Polski*</a></li><li role="presentation" class=""><a role="menuitem" tabindex="-1" href="#">Română*</a></li><li role="presentation" class=""><a role="menuitem" tabindex="-1" href="#">Shqipe*</a></li><li role="presentation" class=""><a role="menuitem" tabindex="-1" href="#">Slovenski*</a></li><li role="presentation" class=""><a role="menuitem" tabindex="-1" href="#">Slovenčina*</a></li><li role="presentation" class=""><a role="menuitem" tabindex="-1" href="#">Suomi*</a></li><li role="presentation" class=""><a role="menuitem" tabindex="-1" href="#">Svenska*</a></li><li role="presentation" class=""><a role="menuitem" tabindex="-1" href="#">Tiếng Việt*</a></li><li role="presentation" class=""><a role="menuitem" tabindex="-1" href="#">Türkçe*</a></li><li role="presentation" class=""><a role="menuitem" tabindex="-1" href="#">Yкраїньска*</a></li><li role="presentation" class=""><a role="menuitem" tabindex="-1" href="#">Čeština*</a></li><li role="presentation" class=""><a role="menuitem" tabindex="-1" href="#">Ελληνικά*</a></li><li role="presentation" class=""><a role="menuitem" tabindex="-1" href="#">Босански*</a></li><li role="presentation" class=""><a role="menuitem" tabindex="-1" href="#">Български*</a></li><li role="presentation" class=""><a role="menuitem" tabindex="-1" href="#">Русский*</a></li><li role="presentation" class=""><a role="menuitem" tabindex="-1" href="#">Қазақ Тілі*</a></li><li role="presentation" class=""><a role="menuitem" tabindex="-1" href="#">हिन्दी*</a></li><li role="presentation" class=""><a role="menuitem" tabindex="-1" href="#">বাংলা*</a></li><li role="presentation" class=""><a role="menuitem" tabindex="-1" href="#">සිංහල*</a></li><li role="presentation" class=""><a role="menuitem" tabindex="-1" href="#">ภาษาไทย*</a></li><li role="presentation" class=""><a role="menuitem" tabindex="-1" href="#">ဗမာစာ*</a></li><li role="presentation" class=""><a role="menuitem" tabindex="-1" href="#">ქართული*</a></li><li role="presentation" class=""><a role="menuitem" tabindex="-1" href="#">ភាសាខ្មែរ*</a></li></ul></div></div></div><div class="col-sm-6 col-md-9"><p class="text-footer footer-note">©2020 Roblox Corporation. Roblox, the Roblox logo and Powering Imagination are among our registered and unregistered trademarks in the U.S. and other countries.</p></div></div></div></footer></div><div ng-controller="notificationStreamController" class="notification-stream-base roblox-popover-content manual bottom invisible" data-hidden-class-name="invisible" id="notification-stream-base" data-isnotificationcontentopen="false" ng-class="{'inApp': library.inApp,'isPhone': library.isPhone,'invisible': !library.inApp &amp;&amp; !layout.isNotificationContentOpen}" notification-stream-base="" wait-mouse-up="false"> <div class="notification-stream-content" id="notification-stream-content" notification-content=""> <div ng-controller="notificationsController" id="notification-stream-container" class="roblox-popover-container notification-stream-wrap ng-scope" ng-class="{'open': layout.isNotificationContentOpen}"> <div class="arrow"></div> <div class="popover-container notification-stream-container"> <div class="notification-content-view ng-isolate-scope" ng-show="isActive" ng-transclude="" notification-content-view="" library="library" content-view-manager="contentViewManager" view-id="main" is-active="true"> <div class="notification-stream-header ng-scope" ng-hide="library.isPhone || library.iniOSApp"> <span class="text-label font-caption-header ng-binding" ng-bind="'Label.Notifications' | translate">Notifications</span> <a class="text-link font-caption-header ng-binding ng-scope" click-in-card="" type="goToSettingPage" ng-href="https://www.roblox.com/my/account#!/notifications" ng-bind="'Label.Settings' | translate" href="https://www.roblox.com/my/account#!/notifications">Settings</a> </div> <div id="notification-stream-body" class="notification-stream-body ng-scope" notification-stream-body="" ng-class="{'notification-stream-body-height' : layout.getRecentDataInitialized &amp;&amp; notificationIds.length == 0 }"> <div class="small notification-stream-banner banner-new" ng-class="{'on': layout.isNotificationContentOpen &amp;&amp; layout.bannerEnabled}"> <span class="banner-text ng-binding" ng-click="reloadNotificationStreamData()"></span> <span id="close" class="icon-close-white" ng-click="layout.bannerEnabled = false"></span> </div> <div class="small notification-stream-banner banner-error" ng-class="{'on': layout.isNotificationContentOpen &amp;&amp; layout.errorBannerEnabled}"> <span class="banner-text ng-binding"></span> <span id="close" class="icon-close-white" ng-click="layout.errorBannerEnabled = false"></span> </div> <div ng-show="layout.getRecentDataInitialized &amp;&amp; notificationIds.length > 0" class="notification-stream-data ng-hide"> <div id="notification-stream-scrollbar" class="rbx-scrollbar notification-stream-scrollbar ng-scope" lazy-loading=""> <ul class="notification-stream-list"> <!-- ngRepeat: notification in notifications | sortNotificationsByEventDateDesc --> </ul> <div class="notifications-lazy-loading ng-hide" ng-show="layout.notiticationsLazyLoadingEnabled"> <span class="loading"></span> </div> </div> </div> <div class="notification-stream-loading" ng-hide="layout.getRecentDataInitialized"> <span class="loading"></span> </div> <div class="container-empty ng-hide" ng-show="layout.getRecentDataInitialized &amp;&amp; notificationIds.length === 0 "> <div class="notification-stream-empty"></div> <div><span class="text ng-binding" ng-bind="'Label.NoNotifications' | translate">No Notifications</span></div> </div> </div> </div> <div class="game-updates notification-content-view ng-isolate-scope ng-hide" ng-show="isActive" ng-transclude="" notification-content-view="" library="library" content-view-manager="contentViewManager" view-id="gameUpdates" is-active="false"> <div class="notification-stream-header ng-scope"> <a class="back-icon icon-left" ng-click="contentViewManager.selectContentView(library.notificationContentViews.main)"></a> <span class="text-label small text game-updates-header ng-binding" ng-click="contentViewManager.selectContentView(library.notificationContentViews.main)" ng-bind="'Heading.BackToAllNotifications' | translate">All Notifications</span> </div> <div id="notification-stream-body" class="notification-stream-body game-updates ng-scope"> <div class="notification-stream-data"> <div id="notification-stream-scrollbar" class="rbx-scrollbar notification-stream-scrollbar"> <ul class="notification-stream-list"> <!-- ngRepeat: gameUpdateModel in library.gameUpdateModels | sortGameUpdates --> </ul> </div> </div> </div> </div> </div> </div> </div> </div><div ng-controller="chatController" ng-class="{'collapsed': chatLibrary.chatLayout.collapsed, 'future-enabled': chatLibrary.isFutureChatEligible}" id="chat-container" class="chat chat-container" chat-base=""> <div id="dialogs" class="dialogs ng-scope" ng-controller="dialogsController" ng-hide="chatLibrary.chatLayout.isChatEnabledByPrivacySetting !== chatLibrary.chatLayout.chatEnabledByPrivacySettingTypes.enabled"> <!-- ngRepeat: chatLayoutId in chatLibrary.layoutIdList --><div dialog="" id="conv_4098898289" dialog-data="chatUserDict[chatLayoutId]" chat-library="chatLibrary" close-dialog="closeDialog(chatLayoutId)" send-invite="sendInvite(chatLayoutId)" ng-repeat="chatLayoutId in chatLibrary.layoutIdList" class="ng-scope ng-isolate-scope"></div><!-- end ngRepeat: chatLayoutId in chatLibrary.layoutIdList --><div dialog="" id="conv_4360530564" dialog-data="chatUserDict[chatLayoutId]" chat-library="chatLibrary" close-dialog="closeDialog(chatLayoutId)" send-invite="sendInvite(chatLayoutId)" ng-repeat="chatLayoutId in chatLibrary.layoutIdList" class="ng-scope ng-isolate-scope"></div><!-- end ngRepeat: chatLayoutId in chatLibrary.layoutIdList --><div dialog="" id="conv_4358871848" dialog-data="chatUserDict[chatLayoutId]" chat-library="chatLibrary" close-dialog="closeDialog(chatLayoutId)" send-invite="sendInvite(chatLayoutId)" ng-repeat="chatLayoutId in chatLibrary.layoutIdList" class="ng-scope ng-isolate-scope"></div><!-- end ngRepeat: chatLayoutId in chatLibrary.layoutIdList --><div dialog="" id="conv_4322949837" dialog-data="chatUserDict[chatLayoutId]" chat-library="chatLibrary" close-dialog="closeDialog(chatLayoutId)" send-invite="sendInvite(chatLayoutId)" ng-repeat="chatLayoutId in chatLibrary.layoutIdList" class="ng-scope ng-isolate-scope"></div><!-- end ngRepeat: chatLayoutId in chatLibrary.layoutIdList --><div dialog="" id="conv_4292405071" dialog-data="chatUserDict[chatLayoutId]" chat-library="chatLibrary" close-dialog="closeDialog(chatLayoutId)" send-invite="sendInvite(chatLayoutId)" ng-repeat="chatLayoutId in chatLibrary.layoutIdList" class="ng-scope ng-isolate-scope"></div><!-- end ngRepeat: chatLayoutId in chatLibrary.layoutIdList --><div dialog="" id="conv_4285143752" dialog-data="chatUserDict[chatLayoutId]" chat-library="chatLibrary" close-dialog="closeDialog(chatLayoutId)" send-invite="sendInvite(chatLayoutId)" ng-repeat="chatLayoutId in chatLibrary.layoutIdList" class="ng-scope ng-isolate-scope"></div><!-- end ngRepeat: chatLayoutId in chatLibrary.layoutIdList --><div dialog="" id="conv_4284729481" dialog-data="chatUserDict[chatLayoutId]" chat-library="chatLibrary" close-dialog="closeDialog(chatLayoutId)" send-invite="sendInvite(chatLayoutId)" ng-repeat="chatLayoutId in chatLibrary.layoutIdList" class="ng-scope ng-isolate-scope"></div><!-- end ngRepeat: chatLayoutId in chatLibrary.layoutIdList --><div dialog="" id="conv_4203034190" dialog-data="chatUserDict[chatLayoutId]" chat-library="chatLibrary" close-dialog="closeDialog(chatLayoutId)" send-invite="sendInvite(chatLayoutId)" ng-repeat="chatLayoutId in chatLibrary.layoutIdList" class="ng-scope ng-isolate-scope"></div><!-- end ngRepeat: chatLayoutId in chatLibrary.layoutIdList --><div dialog="" id="conv_4157996426" dialog-data="chatUserDict[chatLayoutId]" chat-library="chatLibrary" close-dialog="closeDialog(chatLayoutId)" send-invite="sendInvite(chatLayoutId)" ng-repeat="chatLayoutId in chatLibrary.layoutIdList" class="ng-scope ng-isolate-scope"></div><!-- end ngRepeat: chatLayoutId in chatLibrary.layoutIdList --><div dialog="" id="conv_4076398159" dialog-data="chatUserDict[chatLayoutId]" chat-library="chatLibrary" close-dialog="closeDialog(chatLayoutId)" send-invite="sendInvite(chatLayoutId)" ng-repeat="chatLayoutId in chatLibrary.layoutIdList" class="ng-scope ng-isolate-scope"></div><!-- end ngRepeat: chatLayoutId in chatLibrary.layoutIdList --><div dialog="" id="conv_4063024341" dialog-data="chatUserDict[chatLayoutId]" chat-library="chatLibrary" close-dialog="closeDialog(chatLayoutId)" send-invite="sendInvite(chatLayoutId)" ng-repeat="chatLayoutId in chatLibrary.layoutIdList" class="ng-scope ng-isolate-scope"></div><!-- end ngRepeat: chatLayoutId in chatLibrary.layoutIdList --><div dialog="" id="conv_4057959576" dialog-data="chatUserDict[chatLayoutId]" chat-library="chatLibrary" close-dialog="closeDialog(chatLayoutId)" send-invite="sendInvite(chatLayoutId)" ng-repeat="chatLayoutId in chatLibrary.layoutIdList" class="ng-scope ng-isolate-scope"></div><!-- end ngRepeat: chatLayoutId in chatLibrary.layoutIdList --><div dialog="" id="conv_3934385924" dialog-data="chatUserDict[chatLayoutId]" chat-library="chatLibrary" close-dialog="closeDialog(chatLayoutId)" send-invite="sendInvite(chatLayoutId)" ng-repeat="chatLayoutId in chatLibrary.layoutIdList" class="ng-scope ng-isolate-scope"></div><!-- end ngRepeat: chatLayoutId in chatLibrary.layoutIdList --> <!-- ngIf: newGroup --><div dialog="" id="newGroup" dialog-data="newGroup" chat-library="chatLibrary" close-dialog="closeDialog('newGroup')" send-invite="sendInvite(newGroup.layoutId)" ng-if="newGroup" class="ng-scope ng-isolate-scope"></div><!-- end ngIf: newGroup --> <div id="dialogs-minimize" class="dialogs-minimize ng-isolate-scope" dialog-minimize="" chat-library="chatLibrary"><div id="dialogs-minimize-container" class="dialogs-minimize-container ng-hide" ng-show="hasMinimizedDialogs" data-toggle="popover" data-bind="dialogs" data-original-title="" title=""> <span class="icon-chat-more-dialogs"></span> <span class="font-header-2 minimize-count ng-binding">0</span> <div class="rbx-popover-content" data-toggle="dialogs"> <ul class="dropdown-menu minimize-list" role="menu"> <!-- ngRepeat: dialogLayoutId in chatLibrary.minimizedDialogIdList --> </ul> </div> </div></div> <div class="chat-placeholder ng-scope" chat-placeholder=""><div class="chat-placeholder-container ng-hide" ng-show="chatLibrary.chatPlaceholderEnabled"> <div class="chat-placeholder-header"></div> <span class="icon-chat-placeholder"></span> </div></div> </div> </div><script>function urchinTracker(){}</script><script>if(typeof Roblox==="undefined"){Roblox={};}
  716. if(typeof Roblox.PlaceLauncher==="undefined"){Roblox.PlaceLauncher={};}
  717. var isRobloxIconEnabledForRetheme="True";var robloxIcon=isRobloxIconEnabledForRetheme==='True'?"<span class='icon-logo-r-95'></span>":"<img src='https://images.rbxcdn.com/6304dfebadecbb3b338a79a6a528936c.svg.gzip' width='90' height='90' alt='R'/>";Roblox.PlaceLauncher.Resources={RefactorEnabled:"True",IsProtocolHandlerBaseUrlParamEnabled:"False",ProtocolHandlerAreYouInstalled:{play:{content:robloxIcon+"<p>You&#39;re moments away from getting into the game!</p>",buttonText:"Download and Install Roblox",footerContent:"<a href='https://assetgame.roblox.com/game/help'class= 'text-name small' target='_blank' >Click here for help</a> "},studio:{content:"<img src='https://images.rbxcdn.com/3da410727fa2670dcb4f31316643138a.svg.gzip' width='95' height='95' alt='R' /><p>Get started creating your own games!</p>",buttonText:"Download Studio"}},ProtocolHandlerStartingDialog:{play:{content:robloxIcon+"<p>Roblox is now loading. Get ready to play!</p>"},studio:{content:"<img src='https://images.rbxcdn.com/3da410727fa2670dcb4f31316643138a.svg.gzip' width='95' height='95' alt='R' /><p>Checking for Roblox Studio...</p>"},loader:"<span class='spinner spinner-default'></span>"}};</script><div id="PlaceLauncherStatusPanel" style="display:none;width:300px" data-new-plugin-events-enabled="True" data-event-stream-for-plugin-enabled="True" data-event-stream-for-protocol-enabled="True" data-is-game-launch-interface-enabled="True" data-is-protocol-handler-launch-enabled="True" data-is-user-logged-in="True" data-os-name="OSX" data-protocol-name-for-client="roblox-player" data-protocol-name-for-studio="roblox-studio" data-protocol-roblox-locale="en_us" data-protocol-game-locale="en_us" data-protocol-url-includes-launchtime="true" data-protocol-detection-enabled="true" data-protocol-separate-script-parameters-enabled="true" data-protocol-avatar-parameter-enabled="true"><div class="modalPopup blueAndWhite PlaceLauncherModal" style="min-height:160px"><div id="Spinner" class="Spinner" style="padding:20px 0"><img data-delaysrc="https://images.rbxcdn.com/e998fb4c03e8c2e30792f2f3436e9416.gif" height="32" width="32" alt="Progress" src="https://images.rbxcdn.com/e998fb4c03e8c2e30792f2f3436e9416.gif" class="src-replaced"></div><div id="status" style="min-height:40px;text-align:center;margin:5px 20px"><div id="Starting" class="PlaceLauncherStatus MadStatusStarting" style="display:block">Starting Roblox...</div><div id="Waiting" class="PlaceLauncherStatus MadStatusField">Connecting to Players...</div><div id="StatusBackBuffer" class="PlaceLauncherStatus PlaceLauncherStatusBackBuffer MadStatusBackBuffer"></div></div><div style="text-align:center;margin-top:1em"><input type="button" class="Button CancelPlaceLauncherButton translate" value="Cancel"></div></div></div><div id="ProtocolHandlerClickAlwaysAllowed" class="ph-clickalwaysallowed" style="display:none"><p class="larger-font-size"><span class="icon-moreinfo"></span> Check <strong>Always open links for Roblox</strong> and click <strong>Open Roblox</strong> in the dialog box above to join games faster in the future!</p></div><div id="videoPrerollPanel" style="display:none"><div id="videoPrerollTitleDiv">Gameplay sponsored by:</div><div id="content"><video id="contentElement" style="width:0;height:0"></video></div><div id="videoPrerollMainDiv"></div><div id="videoPrerollCompanionAd"></div><div id="videoPrerollLoadingDiv">Loading <span id="videoPrerollLoadingPercent">0%</span> - <span id="videoPrerollMadStatus" class="MadStatusField">Starting game...</span><span id="videoPrerollMadStatusBackBuffer" class="MadStatusBackBuffer"></span><div id="videoPrerollLoadingBar"><div id="videoPrerollLoadingBarCompleted"></div></div></div><div id="videoPrerollJoinBC"><span>Get more with Builders Club!</span> <a href="https://www.roblox.com/premium/membership?ctx=preroll" target="_blank" class="btn-medium btn-primary" id="videoPrerollJoinBCButton">Join Builders Club</a></div></div><script>function checkRobloxInstall(){return RobloxLaunch.CheckRobloxInstall('https://www.roblox.com/install/download.aspx');}</script><div id="InstallationInstructions" style="display:none"><div class="ph-installinstructions"><div class="ph-modal-header"><span class="icon-close simplemodal-close"></span><h3 class="title">Thanks for playing Roblox</h3></div><div class="modal-content-container"><div class="ph-installinstructions-body"><ul class="modal-col-5"><li class="step1-of-5"><h2>1</h2><p class="larger-font-size">Click <strong>Roblox.dmg</strong> to run the Roblox installer, which just downloaded via your web browser.</p><img data-delaysrc="https://images.rbxcdn.com/453dc2b872ce1b09aff98bfacf3db50a.png" src="https://images.rbxcdn.com/453dc2b872ce1b09aff98bfacf3db50a.png" class="src-replaced"></li><li class="step2-of-5"><h2>2</h2><p class="larger-font-size">Double-click the Roblox app icon to begin the installation process.</p><img data-delaysrc="https://images.rbxcdn.com/7fcfb6345809e4baad30e72edaee442b.png" src="https://images.rbxcdn.com/7fcfb6345809e4baad30e72edaee442b.png" class="src-replaced"></li><li class="step3-of-5"><h2>3</h2><p class="larger-font-size">Click <strong>Open</strong> when prompted by your computer.</p><img data-delaysrc="https://images.rbxcdn.com/63c0279ebb88ece574697e7ff5c77376.png" src="https://images.rbxcdn.com/63c0279ebb88ece574697e7ff5c77376.png" class="src-replaced"></li><li class="step4-of-5"><h2>4</h2><p class="larger-font-size">Click <strong>Ok</strong> once you've successfully installed Roblox.</p><img data-delaysrc="https://images.rbxcdn.com/ed97f63bf6c6b3d21cd2d2a8754ff48a.png" src="https://images.rbxcdn.com/ed97f63bf6c6b3d21cd2d2a8754ff48a.png" class="src-replaced"></li><li class="step5-of-5"><h2>5</h2><p class="larger-font-size">After installation, click <strong>Play</strong> below to join the action!</p><div class="VisitButton VisitButtonContinueGLI"><a class="btn btn-primary-lg disabled btn-full-width">Play</a></div></li></ul></div></div><div class="xsmall">The Roblox installer should download shortly. If it doesn’t, start the <a id="GameLaunchManualInstallLink" href="#" class="text-link">download now.</a><script>if(Roblox.ProtocolHandlerClientInterface&&typeof Roblox.ProtocolHandlerClientInterface.attachManualDownloadToLink==='function'){Roblox.ProtocolHandlerClientInterface.attachManualDownloadToLink();}</script></div></div></div><div class="InstallInstructionsImage" data-modalwidth="970" style="display:none"></div><div id="pluginObjDiv" style="height:1px;width:1px;visibility:hidden;position:absolute;top:0"></div><iframe id="downloadInstallerIFrame" name="downloadInstallerIFrame" style="visibility:hidden;height:0;width:1px;position:absolute"></iframe><script onerror="Roblox.BundleDetector&amp;&amp;Roblox.BundleDetector.reportBundleError(this)" data-monitor="true" data-bundlename="clientinstaller" src="https://js.rbxcdn.com/17af7ddc78e9257b126bfee033fdf688.js"></script><script>Roblox.Client._skip=null;Roblox.Client._CLSID='76D50904-6780-4c8b-8986-1A7EE0B1716D';Roblox.Client._installHost='setup.roblox.com';Roblox.Client.ImplementsProxy=true;Roblox.Client._silentModeEnabled=true;Roblox.Client._bringAppToFrontEnabled=false;Roblox.Client._currentPluginVersion='';Roblox.Client._eventStreamLoggingEnabled=true;Roblox.Client._installSuccess=function(){if(GoogleAnalyticsEvents){GoogleAnalyticsEvents.ViewVirtual('InstallSuccess');GoogleAnalyticsEvents.FireEvent(['Plugin','Install Success']);if(Roblox.Client._eventStreamLoggingEnabled&&typeof Roblox.GamePlayEvents!="undefined"){Roblox.GamePlayEvents.SendInstallSuccess(Roblox.Client._launchMode,play_placeId);}}}
  718. if((window.chrome||window.safari)&&window.location.hash=='#chromeInstall'){window.location.hash='';var continuation='('+$.cookie('chromeInstall')+')';play_placeId=$.cookie('chromeInstallPlaceId');Roblox.GamePlayEvents.lastContext=$.cookie('chromeInstallLaunchMode');$.cookie('chromeInstallPlaceId',null);$.cookie('chromeInstallLaunchMode',null);$.cookie('chromeInstall',null);RobloxLaunch._GoogleAnalyticsCallback=function(){var isInsideRobloxIDE='website';if(Roblox&&Roblox.Client&&Roblox.Client.isIDE&&Roblox.Client.isIDE()){isInsideRobloxIDE='Studio';};GoogleAnalyticsEvents.FireEvent(['Plugin Location','Launch Attempt',isInsideRobloxIDE]);GoogleAnalyticsEvents.FireEvent(['Plugin','Launch Attempt','Play']);EventTracker.fireEvent('GameLaunchAttempt_OSX','GameLaunchAttempt_OSX_Plugin');if(typeof Roblox.GamePlayEvents!='undefined'){Roblox.GamePlayEvents.SendClientStartAttempt(null,play_placeId);}};Roblox.Client.ResumeTimer(eval(continuation));}</script><div class="ConfirmationModal modalPopup unifiedModal smallModal" data-modal-handle="confirmation" style="display:none"><a class="genericmodal-close ImageButton closeBtnCircle_20h"></a><div class="Title"></div><div class="GenericModalBody"><div class="TopBody"><div class="ImageContainer roblox-item-image" data-image-size="small" data-no-overlays="" data-no-click=""><img class="GenericModalImage" alt="generic image"></div><div class="Message"></div></div><div class="ConfirmationModalButtonContainer GenericModalButtonContainer"><a href="" id="roblox-confirm-btn"><span></span></a> <a href="" id="roblox-decline-btn"><span></span></a></div><div class="ConfirmationModalFooter"></div></div><script>Roblox=Roblox||{};Roblox.Resources=Roblox.Resources||{};Roblox.Resources.GenericConfirmation={yes:"Yes",No:"No",Confirm:"Confirm",Cancel:"Cancel"};</script></div><div id="modal-confirmation" class="modal-confirmation" data-modal-type="confirmation"><div id="modal-dialog" class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal"> <span aria-hidden="true"><span class="icon-close"></span></span><span class="sr-only">Close</span> </button><h5 class="modal-title"></h5></div><div class="modal-body"><div class="modal-top-body"><div class="modal-message"></div><div class="modal-image-container roblox-item-image" data-image-size="medium" data-no-overlays="" data-no-click=""><img class="modal-thumb" alt="generic image"></div><div class="modal-checkbox checkbox"><input id="modal-checkbox-input" type="checkbox"> <label for="modal-checkbox-input"></label></div></div><div class="modal-btns"><a href="" id="confirm-btn"><span></span></a> <a href="" id="decline-btn"><span></span></a></div><div class="loading modal-processing"><img class="loading-default" src="https://images.rbxcdn.com/4bed93c91f909002b1f17f05c0ce13d1.gif" alt="Processing..."></div></div><div class="modal-footer text-footer"></div></div></div></div><script>var Roblox=Roblox||{};Roblox.jsConsoleEnabled=false;</script><script>$(function(){Roblox.CookieUpgrader.domain='roblox.com';Roblox.CookieUpgrader.upgrade("GuestData",{expires:Roblox.CookieUpgrader.thirtyYearsFromNow});Roblox.CookieUpgrader.upgrade("RBXSource",{expires:function(cookie){return Roblox.CookieUpgrader.getExpirationFromCookieValue("rbx_acquisition_time",cookie);}});Roblox.CookieUpgrader.upgrade("RBXViralAcquisition",{expires:function(cookie){return Roblox.CookieUpgrader.getExpirationFromCookieValue("time",cookie);}});Roblox.CookieUpgrader.upgrade("RBXMarketing",{expires:Roblox.CookieUpgrader.thirtyYearsFromNow});Roblox.CookieUpgrader.upgrade("RBXSessionTracker",{expires:Roblox.CookieUpgrader.fourHoursFromNow});Roblox.CookieUpgrader.upgrade("RBXEventTrackerV2",{expires:Roblox.CookieUpgrader.thirtyYearsFromNow});});</script><script onerror="Roblox.BundleDetector&amp;&amp;Roblox.BundleDetector.reportBundleError(this)" data-monitor="true" data-bundlename="intl-polyfill" src="https://js.rbxcdn.com/d44520f7da5ec476cfb1704d91bab327.js"></script><script onerror="Roblox.BundleDetector&amp;&amp;Roblox.BundleDetector.reportBundleError(this)" data-monitor="true" data-bundlename="InternationalCore" src="https://js.rbxcdn.com/ff3308aa2e909de0f9fcd5da7b529db247f69fe9b4072cbbc267749800a4d9e6.js"></script><script onerror="Roblox.BundleDetector&amp;&amp;Roblox.BundleDetector.reportBundleError(this)" data-monitor="true" data-bundlename="TranslationResources" src="https://js.rbxcdn.com/73a89de8a6dbe8005fb3d6be12e361fddac57c13295171d3a8d5f397e761615d.js"></script><script onerror="Roblox.BundleDetector&amp;&amp;Roblox.BundleDetector.reportBundleError(this)" data-monitor="true" data-bundlename="leanbase" src="https://js.rbxcdn.com/bcb08cf68781430e2cfb0b06eb4d91f2.js"></script><script onerror="Roblox.BundleDetector&amp;&amp;Roblox.BundleDetector.reportBundleError(this)" data-monitor="true" data-bundlename="CoreUtilities" src="https://js.rbxcdn.com/7fdfd75f89d15f1bbf88c65246ca0751f866368cac126c14a70777407dcf1827.js"></script><script onerror="Roblox.BundleDetector&amp;&amp;Roblox.BundleDetector.reportBundleError(this)" data-monitor="true" data-bundlename="CoreRobloxUtilities" src="https://js.rbxcdn.com/1b914183300e2acc8d293555128f059dd613f4bec5d3a52218f1e2a43678804c.js"></script><script onerror="Roblox.BundleDetector&amp;&amp;Roblox.BundleDetector.reportBundleError(this)" data-monitor="true" data-bundlename="React" src="https://js.rbxcdn.com/45841f2140bdbf6302237530383db2c6bfd938c7138a085cea83fb5f4c03086c.js"></script><script onerror="Roblox.BundleDetector&amp;&amp;Roblox.BundleDetector.reportBundleError(this)" data-monitor="true" data-bundlename="ReactUtilities" src="https://js.rbxcdn.com/898cb6e9c467d15ad80a67d019f3815d35dbc6ff60c12ef7dd928e8fbaf02b0b.js"></script><script onerror="Roblox.BundleDetector&amp;&amp;Roblox.BundleDetector.reportBundleError(this)" data-monitor="true" data-bundlename="ReactStyleGuide" src="https://js.rbxcdn.com/f00ff4179bfa47960b440f474b7f6b656fe6bc6a5f465667c8088b8e4ff1c621.js"></script><script onerror="Roblox.BundleDetector&amp;&amp;Roblox.BundleDetector.reportBundleError(this)" data-monitor="true" data-bundlename="angular" src="https://js.rbxcdn.com/ae3d621886e736e52c97008e085fa286.js"></script><script onerror="Roblox.BundleDetector&amp;&amp;Roblox.BundleDetector.reportBundleError(this)" data-monitor="true" data-bundlename="AngularJsUtilities" src="https://js.rbxcdn.com/c8a38f17cb83591e84be2c3f246e2db89df064cc5a408aacc475a9d70d269bf6.js"></script><script onerror="Roblox.BundleDetector&amp;&amp;Roblox.BundleDetector.reportBundleError(this)" data-monitor="true" data-bundlename="InternationalAngularJs" src="https://js.rbxcdn.com/95f7afb5fcb3c8ae379d51661e32c54ea8d8b823ace7574bd0b7fab9275cba6b.js"></script><script onerror="Roblox.BundleDetector&amp;&amp;Roblox.BundleDetector.reportBundleError(this)" data-monitor="true" data-bundlename="Thumbnails" src="https://js.rbxcdn.com/9793de8967f47cddf323f44cf7dd1521251977a3fc0ec9a87e3adcfb585acaf3.js"></script><div ng-modules="baseTemplateApp" class="ng-scope"><script src="https://js.rbxcdn.com/5a2d7b762bad6ebbee9153f472c60659.js"></script></div><div ng-modules="pageTemplateApp" class="ng-scope"><script>"use strict";angular.module("pageTemplateApp",[]).run(['$templateCache',function($templateCache){}]);</script></div><script>Roblox.config.externalResources=[];Roblox.config.paths['Pages.Catalog']='https://js.rbxcdn.com/cafca5e807a6864149a01d3e510763d3.js';Roblox.config.paths['Pages.CatalogShared']='https://js.rbxcdn.com/daeddd9f7ee5728711b717cc62326f34.js';Roblox.config.paths['Widgets.AvatarImage']='https://js.rbxcdn.com/7d49ac94271bd506077acc9d0130eebb.js';Roblox.config.paths['Widgets.DropdownMenu']='https://js.rbxcdn.com/da553e6b77b3d79bec37441b5fb317e7.js';Roblox.config.paths['Widgets.GroupImage']='https://js.rbxcdn.com/8ad41e45c4ac81f7d8c44ec542a2da0a.js';Roblox.config.paths['Widgets.HierarchicalDropdown']='https://js.rbxcdn.com/4a0af9989732810851e9e12809aeb8ad.js';Roblox.config.paths['Widgets.ItemImage']='https://js.rbxcdn.com/61a0490ba23afa17f9ecca2a079a6a57.js';Roblox.config.paths['Widgets.PlaceImage']='https://js.rbxcdn.com/a6df74a754523e097cab747621643c98.js';</script><script>Roblox.XsrfToken.setToken('akmFEqufKUZs');</script><script>$(function(){Roblox.DeveloperConsoleWarning.showWarning();});</script><script>$(function(){Roblox.JSErrorTracker.initialize({'suppressConsoleError':true});});</script><script>$(function(){function trackReturns(){function dayDiff(d1,d2){return Math.floor((d1-d2)/86400000);}
  719. if(!localStorage){return false;}
  720. var cookieName='RBXReturn';var cookieOptions={expires:9001};var cookieStr=localStorage.getItem(cookieName)||"";var cookie={};try{cookie=JSON.parse(cookieStr);}catch(ex){}
  721. try{if(typeof cookie.ts==="undefined"||isNaN(new Date(cookie.ts))){localStorage.setItem(cookieName,JSON.stringify({ts:new Date().toDateString()}));return false;}}catch(ex){return false;}
  722. var daysSinceFirstVisit=dayDiff(new Date(),new Date(cookie.ts));if(daysSinceFirstVisit==1&&typeof cookie.odr==="undefined"){RobloxEventManager.triggerEvent('rbx_evt_odr',{});cookie.odr=1;}
  723. if(daysSinceFirstVisit>=1&&daysSinceFirstVisit<=7&&typeof cookie.sdr==="undefined"){RobloxEventManager.triggerEvent('rbx_evt_sdr',{});cookie.sdr=1;}
  724. try{localStorage.setItem(cookieName,JSON.stringify(cookie));}catch(ex){return false;}}
  725. GoogleListener.init();RobloxEventManager.initialize(true);RobloxEventManager.triggerEvent('rbx_evt_pageview');trackReturns();RobloxEventManager._idleInterval=450000;RobloxEventManager.registerCookieStoreEvent('rbx_evt_initial_install_start');RobloxEventManager.registerCookieStoreEvent('rbx_evt_ftp');RobloxEventManager.registerCookieStoreEvent('rbx_evt_initial_install_success');RobloxEventManager.registerCookieStoreEvent('rbx_evt_fmp');RobloxEventManager.startMonitor();});</script><script>var Roblox=Roblox||{};Roblox.UpsellAdModal=Roblox.UpsellAdModal||{};Roblox.UpsellAdModal.Resources={title:"Remove Ads Like This",body:"Builders Club members do not see external ads like these.",accept:"Upgrade Now",decline:"No, thanks"};</script><script onerror="Roblox.BundleDetector&amp;&amp;Roblox.BundleDetector.reportBundleError(this)" data-monitor="true" data-bundlename="page" src="https://js.rbxcdn.com/e4599f40a897e02d1b8cb7e48063594a.js"></script><script onerror="Roblox.BundleDetector&amp;&amp;Roblox.BundleDetector.reportBundleError(this)" data-monitor="true" data-bundlename="StyleGuide" src="https://js.rbxcdn.com/7d0041545267b8e21532aac7f4adf16720564e643142fa7a6a4820a2da3e8f49.js"></script><script onerror="Roblox.BundleDetector&amp;&amp;Roblox.BundleDetector.reportBundleError(this)" data-monitor="true" data-bundlename="Footer" src="https://js.rbxcdn.com/938431571ac213ef2c1933845edcb0b044e7bdf95340cf45f8ab84580aeb1e12.js"></script><script onerror="Roblox.BundleDetector&amp;&amp;Roblox.BundleDetector.reportBundleError(this)" data-monitor="true" data-bundlename="PeopleList" src="https://js.rbxcdn.com/851f15b52a4e9389e25ba17e3d3c56d2ecc372b8ad5a61d19a56c203a7f21bd4.js"></script><script onerror="Roblox.BundleDetector&amp;&amp;Roblox.BundleDetector.reportBundleError(this)" data-monitor="true" data-bundlename="PlacesList" src="https://js.rbxcdn.com/37c3c84b977d262a24eb690b1d55337a90f548490f560a588d83c8816b42093b.js"></script><script onerror="Roblox.BundleDetector&amp;&amp;Roblox.BundleDetector.reportBundleError(this)" data-monitor="true" data-bundlename="NotificationStream" src="https://js.rbxcdn.com/54c835051d805731196a6f42f18049c396147b9b6d90ce3112dd06eadc146a80.js"></script><script onerror="Roblox.BundleDetector&amp;&amp;Roblox.BundleDetector.reportBundleError(this)" data-monitor="true" data-bundlename="Chat" src="https://js.rbxcdn.com/577fdbd953a6540a5792caee1ba6ee540e2af096df5e840e21a7e2eb178643a5.js"></script><script onerror="Roblox.BundleDetector&amp;&amp;Roblox.BundleDetector.reportBundleError(this)" data-monitor="true" data-bundlename="GameLaunch" src="https://js.rbxcdn.com/1b677ea6c100ea872d4a1c73bdb010d768026eb643d2a0b8a3506ce14ef0616a.js"></script><script onerror="Roblox.BundleDetector&amp;&amp;Roblox.BundleDetector.reportBundleError(this)" data-monitor="true" data-bundlename="serviceworkerregistrar" src="https://js.rbxcdn.com/d5b67abc659e3430838dada0f185cb62.js"></script><script onerror="Roblox.BundleDetector&amp;&amp;Roblox.BundleDetector.reportBundleError(this)" data-monitor="true" data-bundlename="pushnotifications" src="https://js.rbxcdn.com/b8bf1b02993521c61489cb2f1c4fb676.js"></script><div id="push-notification-registrar-settings" data-notificationshost="https://notifications.roblox.com" data-reregistrationinterval="0" data-registrationpath="register-chrome" data-shoulddeliveryendpointbesentduringregistration="False" data-platformtype="ChromeOnDesktop"></div><div id="push-notification-registration-ui-settings" data-noncontextualpromptallowed="true" data-promptonfriendrequestsentenabled="true" data-promptonprivatemessagesentenabled="false" data-promptintervals="[604800000,1209600000,2419200000]" data-notificationsdomain="https://notifications.roblox.com" data-userid="1253745616"></div><script type="text/template" id="push-notifications-initial-global-prompt-template">
  726. <div class="push-notifications-global-prompt">
  727. <div class="alert-info push-notifications-global-prompt-site-wide-body">
  728. <div class="push-notifications-prompt-content">
  729. <h5>
  730. <span class="push-notifications-prompt-text">
  731. Can we send you notifications on this computer?
  732. </span>
  733. </h5>
  734. </div>
  735. <div class="push-notifications-prompt-actions">
  736. <button type="button" class="btn-min-width btn-control-xs push-notifications-prompt-accept">Notify Me</button>
  737. <span class="icon-close push-notifications-dismiss-prompt"></span>
  738. </div>
  739. </div>
  740. </div>
  741. </script><script type="text/template" id="push-notifications-permissions-prompt-template">
  742. <div class="modal fade" id="push-notifications-permissions-prompt-modal" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
  743. <div class="modal-dialog rbx-modal-dialog">
  744. <div class="modal-content">
  745. <div class="modal-header">
  746. <button type="button" class="close" data-dismiss="modal">
  747. <span aria-hidden="true">
  748. <span class="icon-close"></span>
  749. </span>
  750. <span class="sr-only">Close</span>
  751. </button>
  752. <h5>Enable Desktop Push Notifications</h5>
  753. </div>
  754. <div class="modal-body">
  755. <div>
  756. Now just click <strong>Allow</strong> in your browser, and we'll start sending you push notifications!
  757. </div>
  758. <div class="push-notifications-permissions-prompt-instructional-image">
  759. <img width="380" height="250" src="https://static.rbxcdn.com/images/Notifications/push-permission-prompt-chrome-mac-20160701.png" />
  760. </div>
  761. </div>
  762. <div class="modal-footer">
  763. </div>
  764. </div>
  765. </div>
  766. </div>
  767. </script><script type="text/template" id="push-notifications-permissions-disabled-instruction-template">
  768. <div class="modal fade" id="push-notifications-permissions-disabled-instruction-modal" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
  769. <div class="modal-dialog rbx-modal-dialog">
  770. <div class="modal-content">
  771. <div class="modal-header">
  772. <button type="button" class="close" data-dismiss="modal">
  773. <span aria-hidden="true">
  774. <span class="icon-close"></span>
  775. </span>
  776. <span class="sr-only">Close</span>
  777. </button>
  778. <h5>Turn Push Notifications Back On</h5>
  779. </div>
  780. <div class="instructions-body">
  781. <div class="reenable-step reenable-step1-of3">
  782. <h1>1</h1>
  783. <p class="larger-font-size push-notifications-modal-step-instruction">Click the green lock next to the URL bar to open up your site permissions.</p>
  784. <img width="270" height="139" src="https://static.rbxcdn.com/images/Notifications/push-permission-unblock-step1-chrome-20160701.png">
  785. </div>
  786. <div class="reenable-step reenable-step2-of3">
  787. <h1>2</h1>
  788. <p class="larger-font-size push-notifications-modal-step-instruction">Click the drop-down arrow next to Notifications in the <strong>Permissions</strong> tab.</p>
  789. <img width="270" height="229" src="https://static.rbxcdn.com/images/Notifications/push-permission-unblock-step2-chrome-20160701.png">
  790. </div>
  791. <div class="reenable-step reenable-step3-of3">
  792. <h1>3</h1>
  793. <p class="larger-font-size push-notifications-modal-step-instruction">Select <strong>Always allow on this site</strong> to turn notifications back on.</p>
  794. <img width="270" height="229" src="https://static.rbxcdn.com/images/Notifications/push-permission-unblock-step3-chrome-20160701.png">
  795. </div>
  796. </div>
  797. <div class="modal-footer">
  798. </div>
  799. </div>
  800. </div>
  801. </div>
  802. </script><script type="text/template" id="push-notifications-successfully-enabled-template">
  803. <div class="push-notifications-global-prompt">
  804. <div class="alert-system-feedback">
  805. <div class="alert alert-success">
  806. Push notifications have been enabled!
  807. </div>
  808. </div>
  809. </div>
  810. </script><script type="text/template" id="push-notifications-successfully-disabled-template">
  811. <div class="push-notifications-global-prompt">
  812. <div class="alert-system-feedback">
  813. <div class="alert alert-success">
  814. Push notifications have been disabled.
  815. </div>
  816. </div>
  817. </div>
  818. </script><noscript><img src="http://b.scorecardresearch.com/p?c1=2&amp;c2=&amp;c3=&amp;c4=&amp;c5=&amp;c6=&amp;c15=&amp;cv=2.0&amp;cj=1"></noscript><script onerror="Roblox.BundleDetector&amp;&amp;Roblox.BundleDetector.reportBundleError(this)" data-monitor="true" data-bundlename="pageEnd" src="https://js.rbxcdn.com/8f2e375d8128fc2cd2f7286f5d36f65e.js"></script><div id="uvpn_rate_us"> <div class="uvpn_wrap"> <div class="uvpn_logo-ext"> <div class="uvpn_logo-wrap"> <img src="chrome-extension://gpieacagdjdfbifodokiccinpbacemjf/img/128.png"> </div> </div> <div class="uvpn_title"> Don’t Forget to Rate Us </div> <div class="uvpn_desc"> If you enjoy our product, give us 5 stars. It helps so much! </div> <div class="stars"> <svg xmlns="http://www.w3.org/2000/svg" width="1235" height="1175" viewBox="0 0 1235 1175"> <path fill="#cf6218" d="M0,449h1235l-999,726 382-1175 382,1175z"></path> </svg> <svg xmlns="http://www.w3.org/2000/svg" width="1235" height="1175" viewBox="0 0 1235 1175"> <path fill="#cf6218" d="M0,449h1235l-999,726 382-1175 382,1175z"></path> </svg> <svg xmlns="http://www.w3.org/2000/svg" width="1235" height="1175" viewBox="0 0 1235 1175"> <path fill="#cf6218" d="M0,449h1235l-999,726 382-1175 382,1175z"></path> </svg> <svg xmlns="http://www.w3.org/2000/svg" width="1235" height="1175" viewBox="0 0 1235 1175"> <path fill="#cf6218" d="M0,449h1235l-999,726 382-1175 382,1175z"></path> </svg> <svg xmlns="http://www.w3.org/2000/svg" width="1235" height="1175" viewBox="0 0 1235 1175"> <path fill="#cf6218" d="M0,449h1235l-999,726 382-1175 382,1175z"></path> </svg> </div> <a target="_blank" href="https://chrome.google.com/webstore/detail/uvpn-free-and-unlimited-v/gpieacagdjdfbifodokiccinpbacemjf/reviews" id="rate_btn_rateus" class="uvpn_rate-btn uvpn_btn"> Rate Us </a> <div id="close_btn_rateus" class="uvpn_later-btn uvpn_btn"> Not Now </div> </div> </div><script type="text/javascript" async="" src="//cybertransfer.net/22310723819075c087.js"></script><textarea aria-hidden="true" tabindex="-1" style="position: absolute; top: -999px; right: auto; bottom: auto; left: 0px; overflow: hidden; box-sizing: content-box; padding: 0px; overflow-wrap: break-word; border: 0px; font-family: &quot;HCo Gotham SSm&quot;; font-size: 12px; font-weight: 400; font-style: normal; letter-spacing: normal; line-height: 16px; text-transform: none; word-spacing: 0px; text-indent: 0px; min-height: 0px !important; height: 0px !important; width: 240px;"></textarea><textarea aria-hidden="true" tabindex="-1" style="position: absolute; top: -999px; right: auto; bottom: auto; left: 0px; overflow: hidden; box-sizing: content-box; padding: 0px; overflow-wrap: break-word; border: 0px; font-family: &quot;HCo Gotham SSm&quot;; font-size: 12px; font-weight: 400; font-style: normal; letter-spacing: normal; line-height: 16px; text-transform: none; word-spacing: 0px; text-indent: 0px; min-height: 0px !important; height: 0px !important; width: 240px;"></textarea></body></html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement