diff --git a/content/page/search.es.md b/content/page/search.es.md new file mode 100644 index 0000000..e9ac60b --- /dev/null +++ b/content/page/search.es.md @@ -0,0 +1,10 @@ +{ + "date": "2017-09-12T13:25:52-06:00", + "url": "/es/buscar", + "title": "Buscar", + "call_to_action": [ + + ], + "summary": "Your first and last stop when looking for things in Nosara." +} +{{< search >}} \ No newline at end of file diff --git a/content/page/search.md b/content/page/search.md new file mode 100644 index 0000000..c4b3cae --- /dev/null +++ b/content/page/search.md @@ -0,0 +1,10 @@ +{ + "date": "2017-09-12T13:25:52-06:00", + "url": "/search", + "title": "Search", + "call_to_action": [ + + ], + "summary": "Your first and last stop when looking for things in Nosara." +} +{{< search >}} \ No newline at end of file diff --git a/themes/humans-of-nosara/components/field/field.js b/themes/humans-of-nosara/components/field/field.js index 490850c..90e3e38 100644 --- a/themes/humans-of-nosara/components/field/field.js +++ b/themes/humans-of-nosara/components/field/field.js @@ -10,7 +10,8 @@ function delay (cb) { setTimeout(cb, 100); } -document.querySelectorAll('.field > input') +document +.querySelectorAll('.field > input') .forEach(function ($input) { var $label = siblings($input, 'label')[0]; if ($input.value) { @@ -31,4 +32,4 @@ document.querySelectorAll('.field > input') $label.classList.add('field__label--active'); }); }); -}); \ No newline at end of file +}) \ No newline at end of file diff --git a/themes/humans-of-nosara/components/search/search.js b/themes/humans-of-nosara/components/search/search.js new file mode 100644 index 0000000..35c147d --- /dev/null +++ b/themes/humans-of-nosara/components/search/search.js @@ -0,0 +1,184 @@ +const search = require('js-search') +const preact = require('preact') +const h = preact.h +const Component = preact.Component + +class Search extends Component { + constructor(props) { + super(props) + + this.state = { query: '' } + this.search = new search.Search('uid') + this.onChange = this.onChange.bind(this) + } + + getKey(item, key) { + let root = item + const parts = key.split('.') + while (parts.length) { + root = root[parts.shift()] + } + return root + } + + createFacets(entityTypes) { + // Store all searchable values + const facets = [] + + // Loop through each entity and collect searchable values + return facets + } + + normalizeEntities(entityTypes) { + const normalizers = { + 'name': data => data, + 'phone': data => data && data.replace(/(\(*-*\)*\s*)/g, ''), + 'location.name': data => data + } + const data = {} + + entityTypes.forEach(entityType => { + // Create the index for this entity type + data[entityType.type] = data[entityType.type] || {} + + // Fill the index with each unique entity + entityType.data.forEach(entity => { + data[entityType.type][entity.uid] = entity + }) + }) + + return data + } + + componentDidMount() { + this + .load() + .then(entityTypes => { + + }) + } + + onChange(event) { + this.setState({ query: event.target.value }) + } + + load() { + return Promise.all([ + '/data/c21_property.json', + '/data/hon_charity.json', + '/data/hon_interviewee.json', + '/data/ves_graduate.json', + '/data/remax_property.json' + ].map(async data => { + const response = await fetch(data) + return await response.json() + })) + } + + dedupe(arr, key) { + return arr.filter((o, i, arr) => arr.findIndex(t => t[key] === o[key]) === i) + } + + itemFromUID(uid) { + const parts = uid.split(':') + const entityType = parts.shift() + const entityId = parts.shift() + + return this.state.data[entityType][entityId] + } + + query(n) { + const multi = this.state.query.split(' ') + const occurences = {} + const results = [] + + while (multi.length) { + const next = multi.shift() + results.push.apply( + results, + this + .state + .facets + .filter(f => f.key.toLowerCase().indexOf(next) > -1) + ) + } + + // Create a map to sort results by # of matches + results + .forEach(result => { + occurences[result.uid] = occurences[result.uid] || 0 + occurences[result.uid]++ + }) + + return ( + this + .dedupe( + results + .filter(item => occurences[item.uid] > multi.length) + .sort((a, b) => occurences[b.uid] - occurences[a.uid]), + 'uid' + ) + .map(item => { console.log(item); return item; }) + .slice(0, n) + .map(result => this.itemFromUID(result.uid)) + ) + } + + render() { + const results = this.state.query ? this.query(25).map(item => { + const src = !!item.image + ? item.image + : !!item.images + ? item.images[0] + : null + const href = !!item.url + ? item.url + : null + const phone = !!item.phone + ? item.phone + : null + const price = !!item.price + ? item.price + : null + const location = !!item.location + ? item.location + : null + const locationName = !!location + ? location.name + : null + + return ( + h('div', { className: 'search__result' }, + h('a', { href, target: '_blank' }, [ + src ? h('div', { className: 'search__image', style: { backgroundImage: `url(${src})` } }) : null, + price + ? h('div', { className: 'search__price' }, `$${Number(price).toLocaleString()}`) + : null, + h('h3', null, item.name), + phone + ? href + ? h('div', { className: 'search__phone' }, phone) + : h('a', { href: `tel:${phone}` }, h('div', { className: 'search__phone' }, phone)) + : null, + locationName + ? h('div', { className: 'search__location' }, locationName) + : null, + ]) + ) + ) + }) : null + + return ( + h('div', null, [ + h('div', { className: 'field search__field '}, [ + h('svg', { className: 'search__icon', xmlns: 'http://www.w3.org/2000/svg', viewBox: '0 0 20 20' }, [ h('path', { d: 'M12.9 14.32a8 8 0 1 1 1.41-1.41l5.35 5.33-1.42 1.42-5.33-5.34zM8 14A6 6 0 1 0 8 2a6 6 0 0 0 0 12z' }) ]), + h('input', { value: this.state.query, className: 'field__input', id: 'search', type: 'text', name: 'search', placeholder: 'What are you looking for?', onInput: this.onChange }) + ]), + !this.state.query ? h('div', { className: 'search__suggestions' }, 'You could try looking for people, properties or charities.') : null, + h('div', { className: 'search__results' }, results) + ]) + ) + } +} + +preact.render(h(Search), document.querySelector('#search')) \ No newline at end of file diff --git a/themes/humans-of-nosara/components/search/search.scss b/themes/humans-of-nosara/components/search/search.scss new file mode 100644 index 0000000..7d3034f --- /dev/null +++ b/themes/humans-of-nosara/components/search/search.scss @@ -0,0 +1,81 @@ +.search { + max-width: 960px; + margin: 2rem auto; + text-align: center; +} + +.search__field input { + padding-top: .75rem; + padding-bottom: .75rem; + padding-left: 2.5rem; + font-family: 'Montserrat', sans-serif; +} + +.search__icon { + position: absolute; + left: .75rem; + top: .85rem; + width: 1rem; + height: 1rem; + fill: #3c3c3c; +} + +.search__suggestions { + margin: 2rem 0; + font-weight: 700; + font-size: .9rem; +} + +.search__results { + margin: 2rem auto; + display: flex; + flex-wrap: wrap; + justify-content: space-between; +} + +.search__result { + box-sizing: border-box; + flex: 1 1 100%; + text-align: left; + box-shadow: 0 10px 15px rgba(50, 50, 93, .1), 0 5px 15px rgba(0, 0, 0, .07); + margin-bottom: 3rem; + border-radius: 5px; + overflow: hidden; +} +@media (min-width: 560px) { + .search__result { + flex: 0 1 47%; + } +} + +.search__result a { + text-decoration: inherit; +} + +.search__image { + width: 100%; + height: 10rem; + background-size: cover; + background-position: center; + background-repeat: no-repeat; +} + +.search__result h3 { + margin: 1rem; + font-size: 1rem; +} + +.search__phone { + font-size: .8rem; + margin: 1rem; +} + +.search__price { + font-size: 1.25rem; + margin: 1rem; +} + +.search__location { + font-size: .8rem; + margin: 1rem; +} \ No newline at end of file diff --git a/themes/humans-of-nosara/crawlers/bt_yoga_class.js b/themes/humans-of-nosara/crawlers/bt_yoga_class.js new file mode 100644 index 0000000..1852966 --- /dev/null +++ b/themes/humans-of-nosara/crawlers/bt_yoga_class.js @@ -0,0 +1,3 @@ +module.exports = () => { + +} \ No newline at end of file diff --git a/themes/humans-of-nosara/crawlers/c21_property.js b/themes/humans-of-nosara/crawlers/c21_property.js new file mode 100644 index 0000000..5a2d67f --- /dev/null +++ b/themes/humans-of-nosara/crawlers/c21_property.js @@ -0,0 +1,25 @@ +module.exports = async (page) => { + await page.goto('https://century21nosara.com/nosara-real-estate-listings/', { + waitUntil: 'load', + timeout: 0 + }) + + const properties = await page.evaluate(() => { + const data = [] + document.querySelectorAll('.property-item-wrapper').forEach(node => { + try { + data.push({ + uid: 'c21_property_' + data.length, + name: node.querySelector('h4 a').innerHTML.trim(), + location: { name: 'Nosara', geo: null }, + images: [node.querySelector('.attachment-property-thumb-image').src], + price: parseInt(node.querySelector('.price').innerHTML.split('').shift().trim().replace(/\$/g, '').replace('.00', '').replace(/,/g, '')), + url: node.querySelector('h4 a').href + }) + } catch (err) {} + }) + return data + }) + + return properties +} \ No newline at end of file diff --git a/themes/humans-of-nosara/crawlers/hon_charity.js b/themes/humans-of-nosara/crawlers/hon_charity.js new file mode 100644 index 0000000..f332811 --- /dev/null +++ b/themes/humans-of-nosara/crawlers/hon_charity.js @@ -0,0 +1,19 @@ +module.exports = async (page) => { + await page.goto('https://www.humansofnosara.org/donate/') + + const charities = await page.evaluate(() => { + const data = [] + document.querySelectorAll('.feature-cta').forEach(node => { + data.push({ + uid: 'hon_charity_' + data.length, + name: node.querySelector('.feature-cta__button').innerHTML.trim(), + image: node.querySelector('.feature-cta__background').style.backgroundImage.replace('url("', '').replace('")', ''), + location: { name: 'Nosara', geo: null }, + url: node.querySelector('.feature-cta__content-link').href + }) + }) + return data + }) + + return charities +} \ No newline at end of file diff --git a/themes/humans-of-nosara/crawlers/hon_interviewee.js b/themes/humans-of-nosara/crawlers/hon_interviewee.js new file mode 100644 index 0000000..6ffdaeb --- /dev/null +++ b/themes/humans-of-nosara/crawlers/hon_interviewee.js @@ -0,0 +1,25 @@ +module.exports = async (page) => { + await page.goto('https://www.humansofnosara.org/') + + const interviewee = await page.evaluate(() => { + const data = [] + const capitalize = str => str.split(' ').map(substr => `${substr.slice(0, 1).toUpperCase()}${substr.slice(1)}`).join(' ') + document.querySelectorAll('.article-teaser').forEach(node => { + try { + data.push({ + uid: 'hon_interviewee_' + data.length, + name: capitalize(node.querySelector('a').href.replace('https://www.humansofnosara.org/human/', '').replace(/-/g, ' ').replace(/\//g, '')), + image: node.querySelector('.article-teaser__image').src, + location: { name: 'Nosara', geo: null }, + phone: null, + email: null + }) + } catch (err) { + data.push(err.toString()) + } + }) + return data + }) + + return interviewee +} \ No newline at end of file diff --git a/themes/humans-of-nosara/crawlers/remax_property.js b/themes/humans-of-nosara/crawlers/remax_property.js new file mode 100644 index 0000000..b94954c --- /dev/null +++ b/themes/humans-of-nosara/crawlers/remax_property.js @@ -0,0 +1,39 @@ +module.exports = async (page) => { + const properties = [] + let result = {} + + do { + await page.goto(result.next || 'https://www.remax-tresamigos-cr.com/properties', { + waitUntil: 'load', + timeout: 0 + }) + + result = await page.evaluate(() => { + const data = [] + + document.querySelectorAll('.view-id-real_estate_property_list .views-column').forEach(node => { + try { + data.push({ + uid: 'remax_property_' + data.length, + name: node.querySelector('.views-field-title .field-content a').innerHTML.trim(), + location: { name: node.querySelector('.views-field-field-location .field-content').innerHTML.trim(), geo: null }, + images: [node.querySelector('.views-field-property-photo .field-content img').src], + price: parseInt(node.querySelector('.views-field-property-price .field-content').innerHTML.trim().replace(/\$/g, '').replace(/,/g, '')), + url: node.querySelector('.views-field-title .field-content a').href + }) + } catch (err) { + console.error(err) + } + }) + + return { + data: data.map(item => ({ ...item, location: { ...item.location, name: item.location.name === 'Other' ? null : item.location.name } })), + next: document.querySelector('.pager-next a') ? document.querySelector('.pager-next a').href : null + } + }) + + properties.push.apply(properties, result.data) + } while (result.next) + + return properties +} \ No newline at end of file diff --git a/themes/humans-of-nosara/crawlers/sn_property.js b/themes/humans-of-nosara/crawlers/sn_property.js new file mode 100644 index 0000000..1852966 --- /dev/null +++ b/themes/humans-of-nosara/crawlers/sn_property.js @@ -0,0 +1,3 @@ +module.exports = () => { + +} \ No newline at end of file diff --git a/themes/humans-of-nosara/crawlers/ves_graduate.js b/themes/humans-of-nosara/crawlers/ves_graduate.js new file mode 100644 index 0000000..ddde61b --- /dev/null +++ b/themes/humans-of-nosara/crawlers/ves_graduate.js @@ -0,0 +1,27 @@ +module.exports = async (page) => { + await page.goto('https://www.viveelsuenocr.org/participant/') + + const graduates = await page.evaluate(() => { + const data = [] + document.querySelectorAll('.participant__teaser').forEach(participantTeaser => { + data.push({ + uid: 'ves_graduate_' + data.length, + name: participantTeaser.querySelector('.participant__teaser-title').innerHTML.trim(), + image: participantTeaser.querySelector('.participant__teaser-image').getAttribute('data-src'), + location: { name: 'Nosara', geo: null }, + phone: participantTeaser.querySelector('.participant__teaser-phone').innerHTML.trim(), + email: null + }) + }) + return ( + data + .filter(item => item.name.indexOf('&') === -1) + .map(item => ({ + ...item, + phone: item.phone === 'Unavailable' ? null : item.phone + })) + ) + }) + + return graduates +} \ No newline at end of file diff --git a/themes/humans-of-nosara/entity_types.json b/themes/humans-of-nosara/entity_types.json new file mode 100644 index 0000000..65891b6 --- /dev/null +++ b/themes/humans-of-nosara/entity_types.json @@ -0,0 +1,81 @@ +{ + "entity_types": [ + { + "id": "event", + "name": { + "single": "Event", + "plural": "Events" + }, + "fields": [ + "name", + "host", + "location", + "time" + ] + }, + { + "id": "yoga_class", + "name": { + "single": "Yoga Class", + "plural": "Yoga Classes" + }, + "fields": [ + "name", + "host", + "location", + "time" + ] + }, + { + "id": "yoga_teacher", + "name": { + "single": "Yoga Teacher", + "plural": "Yoga Teachers" + }, + "fields": [ + "name", + "location" + ] + }, + { + "id": "real_estate", + "name": { + "single": "Real Estate", + "plural": "Real Estate" + }, + "fields": [ + "name", + "images", + "location", + "price", + "url" + ] + }, + { + "id": "person", + "name": { + "single": "Person", + "plural": "People" + }, + "fields": [ + "name", + "image", + "location", + "phone", + "email" + ] + }, + { + "id": "charity", + "name": { + "single": "Charity", + "plural": "Charities" + }, + "fields": [ + "name", + "location", + "url" + ] + } + ] +} \ No newline at end of file diff --git a/themes/humans-of-nosara/gulpfile.js b/themes/humans-of-nosara/gulpfile.js index c801dae..a2ed900 100644 --- a/themes/humans-of-nosara/gulpfile.js +++ b/themes/humans-of-nosara/gulpfile.js @@ -26,7 +26,7 @@ gulp.task('watch', ['hugo'], function () { }); gulp.task('hugo', function (done) { - new Promise(function (resolve, reject) { + new Promise(function (resolve) { gulp .src('./scss/styles.scss') .pipe(sassGlob()) @@ -37,13 +37,12 @@ gulp.task('hugo', function (done) { .on('end', resolve); }) .then(function () { - return new Promise(function (resolve, reject) { + return new Promise(function (resolve) { var bundledStream = through(); bundledStream .pipe(source('bundle.js')) .pipe(buffer()) .pipe(sourcemaps.init({loadMaps: true})) - .pipe(uglify()) .pipe(sourcemaps.write('./')) .pipe(gulp.dest('./static/js/')); diff --git a/themes/humans-of-nosara/index.js b/themes/humans-of-nosara/index.js new file mode 100644 index 0000000..fa83883 --- /dev/null +++ b/themes/humans-of-nosara/index.js @@ -0,0 +1,58 @@ +const fs = require('fs') +const path = require('path') +const puppeteer = require('puppeteer') + +const { validate } = require('./validator') +const sourcesObject = require('./sources') + +const entityTypes = require('./entity_types.json') + +const getCacheItem = (cid) => { + return new Promise((resolve, reject) => { + fs.readFile(path.join(__dirname, '/static/data/', cid), (err, data) => { + if (err) reject(err) + else resolve(data) + }) + }) +} + +const setCacheItem = (cid, data) => { + return new Promise((resolve, reject) => { + fs.writeFile(path.join(__dirname, '/static/data/', cid), JSON.stringify(data), (err) => { + if (err) reject(err) + else resolve() + }) + }) +} + +(async () => { + const sourcesArray = Object.keys(sourcesObject).map(key => ({ id: key, ...sourcesObject[key] })) + const browser = await puppeteer.launch() + const page = await browser.newPage() + + for (let i = 0; i < sourcesArray.length; i++) { + const source = sourcesArray[i] + const entityType = entityTypes.entity_types.filter(entityType => entityType.id === source.entity_type).shift() + + try { + await getCacheItem(source.cid) + console.log(`Found source: ${source.id} @ ${source.cid}`) + } catch (err) { + try { + const data = await require(`./crawlers/${source.id}.js`)(page) + const errors = validate(data, entityType) + + if (errors.length === 0) { + await setCacheItem(source.cid, { data, type: source.entity_type, name: source.name }) + console.log(`Cached source: ${source.id} @ ${source.cid}`) + } else { + console.error(`Validation errors found in source: ${source.id}`) + } + } catch (err) { + console.error(`Couldn't find source function for ${source.id}`, '\n', err) + } + } + } + + await browser.close() +})() \ No newline at end of file diff --git a/themes/humans-of-nosara/layouts/partials/footer.html b/themes/humans-of-nosara/layouts/partials/footer.html index 73f42cc..c623c52 100644 --- a/themes/humans-of-nosara/layouts/partials/footer.html +++ b/themes/humans-of-nosara/layouts/partials/footer.html @@ -8,6 +8,5 @@ {{ partial "scripts/browser-detect.html" }} - {{ partial "scripts/olark.html" }} \ No newline at end of file diff --git a/themes/humans-of-nosara/layouts/shortcodes/search.html b/themes/humans-of-nosara/layouts/shortcodes/search.html new file mode 100644 index 0000000..8e3319e --- /dev/null +++ b/themes/humans-of-nosara/layouts/shortcodes/search.html @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/themes/humans-of-nosara/package-lock.json b/themes/humans-of-nosara/package-lock.json index c755835..7b496f7 100644 --- a/themes/humans-of-nosara/package-lock.json +++ b/themes/humans-of-nosara/package-lock.json @@ -56,6 +56,14 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" }, + "agent-base": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", + "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", + "requires": { + "es6-promisify": "^5.0.0" + } + }, "ajv": { "version": "5.5.2", "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", @@ -252,6 +260,11 @@ "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=" }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" + }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -655,6 +668,11 @@ "ieee754": "^1.1.4" } }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, "buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", @@ -1246,6 +1264,19 @@ "es6-symbol": "^3.1.1" } }, + "es6-promise": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.6.tgz", + "integrity": "sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q==" + }, + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "requires": { + "es6-promise": "^4.0.3" + } + }, "es6-symbol": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", @@ -1417,6 +1448,62 @@ } } }, + "extract-zip": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz", + "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=", + "requires": { + "concat-stream": "1.6.2", + "debug": "2.6.9", + "mkdirp": "0.5.1", + "yauzl": "2.4.1" + }, + "dependencies": { + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", @@ -1441,6 +1528,14 @@ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" }, + "fd-slicer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", + "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", + "requires": { + "pend": "~1.2.0" + } + }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", @@ -2154,6 +2249,30 @@ "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" }, + "https-proxy-agent": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", + "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", + "requires": { + "agent-base": "^4.1.0", + "debug": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } + } + }, "ieee754": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", @@ -2427,6 +2546,11 @@ "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.8.tgz", "integrity": "sha512-hm2nYpDrwoO/OzBhdcqs/XGT6XjSuSSCVEpia+Kl2J6x4CYt5hISlVL/AYU1khoDXv0AQVgxtdJySb9gjAn56Q==" }, + "js-search": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/js-search/-/js-search-1.4.2.tgz", + "integrity": "sha1-WakeEX1rrbIL8NdkO6dXfVqB1+I=" + }, "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", @@ -2824,6 +2948,11 @@ "brorand": "^1.0.1" } }, + "mime": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", + "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==" + }, "mime-db": { "version": "1.29.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.29.0.tgz", @@ -3429,6 +3558,11 @@ "sha.js": "^2.4.8" } }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" + }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -3495,6 +3629,11 @@ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=" }, + "preact": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/preact/-/preact-8.4.2.tgz", + "integrity": "sha512-TsINETWiisfB6RTk0wh3/mvxbGRvx+ljeBccZ4Z6MPFKgu/KFGyf2Bmw3Z/jlXhL5JlNKY6QAbA9PVyzIy9//A==" + }, "pretty-hrtime": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", @@ -3510,6 +3649,16 @@ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" + }, + "proxy-from-env": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", + "integrity": "sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4=" + }, "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", @@ -3532,6 +3681,36 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" }, + "puppeteer": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-1.13.0.tgz", + "integrity": "sha512-LUXgvhjfB/P6IOUDAKxOcbCz9ISwBLL9UpKghYrcBDwrOGx1m60y0iN2M64mdAUbT4+7oZM5DTxOW7equa2fxQ==", + "requires": { + "debug": "^4.1.0", + "extract-zip": "^1.6.6", + "https-proxy-agent": "^2.2.1", + "mime": "^2.0.3", + "progress": "^2.0.1", + "proxy-from-env": "^1.0.0", + "rimraf": "^2.6.1", + "ws": "^6.1.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } + } + }, "qs": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", @@ -5085,6 +5264,14 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, + "ws": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.0.tgz", + "integrity": "sha512-deZYUNlt2O4buFCa3t5bKLf8A7FPP/TVjwOeVNpw818Ma5nk4MLXls2eoEGS39o8119QIYxTrTDoPQ5B/gTD6w==", + "requires": { + "async-limiter": "~1.0.0" + } + }, "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", @@ -5114,6 +5301,14 @@ "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" } } + }, + "yauzl": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", + "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", + "requires": { + "fd-slicer": "~1.0.1" + } } } } diff --git a/themes/humans-of-nosara/package.json b/themes/humans-of-nosara/package.json index 802289c..68ba5b3 100644 --- a/themes/humans-of-nosara/package.json +++ b/themes/humans-of-nosara/package.json @@ -13,6 +13,9 @@ "gulp-sass-glob": "^1.0.8", "gulp-sourcemaps": "^2.6.4", "gulp-uglify": "^3.0.0", + "js-search": "^1.4.2", + "preact": "^8.4.2", + "puppeteer": "^1.13.0", "through2": "^2.0.3", "vinyl-buffer": "^1.0.0", "vinyl-source-stream": "^1.1.0" diff --git a/themes/humans-of-nosara/sources.js b/themes/humans-of-nosara/sources.js new file mode 100644 index 0000000..cf18fb4 --- /dev/null +++ b/themes/humans-of-nosara/sources.js @@ -0,0 +1,84 @@ +/** + * @file source.js + * + * source.js contains all data sources. + * + * Each data source declares: + * - `type` - source type + * - `source` - a function which returns data + * - `cid` - cache ID + * + * Source types include: + * - `csv` + * - `crawler` + * + * The `source` function is run when no cache item is found and should return + * a list of items which will map to the `data` parameter in the cache file. + */ + +// const fs = require('fs') +// const path = require('path') + +// const parseCSV = (absoluteFilePath) => { +// return new Promise((resolve, reject) => { +// fs.readFile(absoluteFilePath, (err, data) => { +// if (err) reject(err) +// else resolve(data) +// }) +// }) +// } + +module.exports = { + sn_property: { + /** + * Type of source + */ + type: 'crawler', + + /** + * Type of entity + */ + entity_type: 'real_estate', + name: ['Real Estate', 'Property', 'Properties'], + + /** + * Cache ID + */ + cid: 'sn_property.json', + }, + + c21_property: { + type: 'crawler', + entity_type: 'real_estate', + name: ['Real Estate', 'Property', 'Properties'], + cid: 'c21_property.json', + }, + + remax_property: { + type: 'crawler', + entity_type: 'real_estate', + name: ['Real Estate', 'Property', 'Properties'], + cid: 'remax_property.json', + }, + + ves_graduate: { + type: 'crawler', + entity_type: 'person', + name: ['People', 'Person'], + cid: 'ves_graduate.json' + }, + + hon_interviewee: { + type: 'crawler', + entity_type: 'person', + name: ['People', 'Person'], + cid: 'hon_interviewee.json' + }, + + hon_charity: { + type: 'crawler', + entity_type: 'charity', + name: ['Charity', 'Charities'], + cid: 'hon_charity.json' + }, +} \ No newline at end of file diff --git a/themes/humans-of-nosara/static/css/styles.css b/themes/humans-of-nosara/static/css/styles.css index 3575381..f465ca8 100644 --- a/themes/humans-of-nosara/static/css/styles.css +++ b/themes/humans-of-nosara/static/css/styles.css @@ -1 +1 @@ -body,html{color:#3c3c3c}body,html{margin:0;min-height:100vh;font-size:16px;color:#3c3c3c}a{text-decoration:none;color:#000}main{min-height:74vh}input{border:0;border-radius:0;background:#fff;-webkit-appearance:none}body,html{font-family:Montserrat,sans-serif;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}.article-detail{position:relative;max-width:960px;margin:0 auto}@media (min-width:961px){.article-detail{margin:2rem auto 0}}.article-detail__shadow-wrapper{position:relative}.article-detail__shadow-wrapper:before{content:"";position:absolute;bottom:5px;width:60%;height:0;background:#000;left:0;-webkit-box-shadow:7px -3px 24px 5px rgba(0,0,0,.8);box-shadow:7px -3px 24px 5px rgba(0,0,0,.8);-webkit-transform:rotate(-2deg);-ms-transform:rotate(-2deg);transform:rotate(-2deg)}.article-detail__image-wrapper{position:relative;overflow:hidden;margin-bottom:1rem;background:#ccc}.article-detail__image{position:absolute;bottom:0;width:100%}.article-detail__comment{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;vertical-align:top;border-radius:4px;font-size:13px;height:28px;line-height:28px;font-weight:700;padding:0 6px;background:#4267b2;border:1px solid #4267b2;color:#fff;cursor:pointer;font-family:Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;margin:0;-webkit-user-select:none;white-space:nowrap}.article-detail__comment:hover{background:#365899;border:1px solid #365899}.article-detail__meta{max-width:640px;margin:0 1rem}@media (min-width:480px){.article-detail__meta{margin:0 2rem}}@media (min-width:720px){.article-detail__meta{margin:0 auto}}.article-detail__title{font-size:1.5rem;color:#212121}@media (min-width:720px){.article-detail__title{font-size:2rem}}.article-detail__body p{font-family:Mukta;font-size:1.05rem;line-height:1.5;letter-spacing:.05rem;margin:1rem}@media (min-width:480px){.article-detail__body p{margin:1rem 2rem}}@media (min-width:720px){.article-detail__body p{font-size:1.25rem;line-height:1.75;max-width:640px;margin:1rem auto}}.article-detail__body img{display:block;margin:.5rem auto;width:100%}@media (min-width:480px){.article-detail__body img{margin:2rem auto}}.article-detail__body a{text-decoration:underline}.article-detail__body .article-detail__small-text{font-size:.9rem;margin:1rem}@media (min-width:480px){.article-detail__body .article-detail__small-text{margin:1rem 2rem}}@media (min-width:720px){.article-detail__body .article-detail__small-text{font-size:1rem;max-width:640px;margin:1rem auto}}.article-detail__comments{padding:1rem;max-width:640px;margin:0 auto}.article-listing{max-width:560px;margin:1rem .75rem;-webkit-columns:1;columns:1}@media (min-width:600px){.article-listing{margin:1rem auto}}@media (min-width:1080px){.article-listing{max-width:960px;margin:2rem auto;-webkit-columns:2;columns:2}}@media (min-width:1440px){.article-listing{max-width:1280px;-webkit-columns:3;columns:3}}.article-teaser{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0 0 2.5rem;-webkit-column-break-inside:avoid;break-inside:avoid;page-break-inside:avoid;width:100%;position:relative}@media (min-width:1440px){.browser-chrome .article-teaser{display:block}}.article-teaser__summary{position:relative;font-family:Mukta;font-size:14px;line-height:1.75;letter-spacing:.03rem;margin:0;padding:1rem 1rem 2.25rem;color:#212121}@media (min-width:480px){.article-teaser__summary{font-size:16px}}@media (min-width:560px){.article-teaser__summary{border-bottom:1px solid #f0f0f0;border-right:1px solid #f0f0f0;border-left:1px solid #f0f0f0;border-radius:5px}}.article-teaser__read-more{position:absolute;right:1rem;bottom:1rem;text-decoration:underline;text-align:right;line-height:1;font-size:12px}@media (min-width:480px){.article-teaser__read-more{font-size:14px}}.article-teaser__image-wrapper{position:relative;overflow:hidden}.article-teaser__image{position:absolute;width:100%;bottom:0}.feature-cta{height:400px;position:relative;margin:0}.feature-cta:first-child{margin-top:2rem}@media (min-width:1080px){.feature-cta{margin:2rem 0 2rem}.feature-cta:last-child{margin-bottom:0}}@media (min-width:1200px){.feature-cta{max-width:1280px;margin:2rem auto}}.feature-cta__background{width:100%;height:100%;position:absolute;top:0;background-position:center;background-size:cover;background-repeat:no-repeat;-webkit-filter:brightness(.3);filter:brightness(.3);z-index:-1}.feature-cta__content{display:table-cell;vertical-align:middle;text-align:center;padding:1rem}.feature-cta__content-wrapper{display:table;width:100%;height:400px}@media (min-width:1080px){.feature-cta__content-wrapper{width:400px}}.feature-cta__content-link{color:#fff}.feature-cta__button{display:block;font-size:2rem;font-weight:700}.feature-cta__description{display:block;max-width:200px;margin:0 auto;font-size:.85rem}.feature-cta__copyright{position:absolute;right:10px;bottom:10px;color:#fff;font-size:.9rem}.feature-cta__copyright a{color:#fff;text-decoration:underline}.hero{text-align:center}.hero__title{display:inline-block;line-height:2rem;font-size:2rem;padding:.5rem;background:#212121;color:#fff}@media (min-width:720px){.hero__title{padding:1rem;line-height:3rem;font-size:3rem}}@media (min-width:1080px){.hero__title{line-height:4rem;font-size:4rem}}.field{position:relative}.field__label{position:absolute;font-size:.85rem;font-weight:700;top:1.25rem;left:.5rem;-webkit-transition:top .3s ease,font-size .3s ease;-o-transition:top .3s ease,font-size .3s ease;transition:top .3s ease,font-size .3s ease}.field__label--active{font-size:.75rem;top:0}.field__input{border:0;width:100%;padding:1.25rem .5rem .5rem;font-size:.95rem;border-bottom:3px solid #3c3c3c}.footer{height:100px;background:#212121;margin:2rem 0 0}.footer__copyright{line-height:100px;color:#fff;font-size:.9rem;text-align:center}@media (min-width:720px){.footer__copyright{text-align:left;font-size:1rem;margin:0 2rem}}.form-two-column{max-width:320px;margin:2rem auto}@media (min-width:640px){.form-two-column{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;max-width:560px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}}.form-two-column__field{-webkit-box-flex:0;-ms-flex:0 0 47.5%;flex:0 0 47.5%;margin-bottom:1rem}.form-two-column__field:last-child{margin-bottom:0}.form-two-column__submit{margin:1rem 0}.layout-max{max-width:720px;margin:0 1rem;position:relative}.layout-max ul{padding-left:1.25rem}.layout-max li{margin-bottom:.5rem}.layout-max a{text-decoration:underline;color:#3c3c3c}.layout-max a:hover{color:#212121}.layout-max p{font-family:Mukta;font-size:1.15rem;line-height:1.6;letter-spacing:.02rem}@media (min-width:760px){.layout-max{margin:0 auto}}.navigation{background:#212121}.navigation__logo{-webkit-filter:invert(100%);filter:invert(100%);width:30px;height:30px}.navigation__nav{max-width:1080px;margin:0 auto;padding:1.5rem}.navigation__nav-items{float:right}.navigation__language,.navigation__nav-item{color:#fff;height:30px;line-height:30px;margin-right:.5rem;font-size:.9rem}@media (min-width:480px){.navigation__language,.navigation__nav-item{margin-right:1rem;font-size:1rem}}.navigation__language:last-child,.navigation__nav-item:last-child{margin-right:0}.navigation__language{margin-left:1rem}@media (min-width:480px){.navigation__language{margin-left:2rem}}.submit{font-size:.9rem;font-weight:700;background:#3c3c3c;color:#fff;border:0;border-radius:0;padding:.5rem 1rem} \ No newline at end of file +body,html{color:#3c3c3c}body,html{margin:0;min-height:100vh;font-size:16px;color:#3c3c3c}a{text-decoration:none;color:#000}main{min-height:74vh}input{border:0;border-radius:0;background:#fff;-webkit-appearance:none}body,html{font-family:Montserrat,sans-serif;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}.article-detail{position:relative;max-width:960px;margin:0 auto}@media (min-width:961px){.article-detail{margin:2rem auto 0}}.article-detail__shadow-wrapper{position:relative}.article-detail__shadow-wrapper:before{content:"";position:absolute;bottom:5px;width:60%;height:0;background:#000;left:0;-webkit-box-shadow:7px -3px 24px 5px rgba(0,0,0,.8);box-shadow:7px -3px 24px 5px rgba(0,0,0,.8);-webkit-transform:rotate(-2deg);-ms-transform:rotate(-2deg);transform:rotate(-2deg)}.article-detail__image-wrapper{position:relative;overflow:hidden;margin-bottom:1rem;background:#ccc}.article-detail__image{position:absolute;bottom:0;width:100%}.article-detail__comment{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;vertical-align:top;border-radius:4px;font-size:13px;height:28px;line-height:28px;font-weight:700;padding:0 6px;background:#4267b2;border:1px solid #4267b2;color:#fff;cursor:pointer;font-family:Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;margin:0;-webkit-user-select:none;white-space:nowrap}.article-detail__comment:hover{background:#365899;border:1px solid #365899}.article-detail__meta{max-width:640px;margin:0 1rem}@media (min-width:480px){.article-detail__meta{margin:0 2rem}}@media (min-width:720px){.article-detail__meta{margin:0 auto}}.article-detail__title{font-size:1.5rem;color:#212121}@media (min-width:720px){.article-detail__title{font-size:2rem}}.article-detail__body p{font-family:Mukta;font-size:1.05rem;line-height:1.5;letter-spacing:.05rem;margin:1rem}@media (min-width:480px){.article-detail__body p{margin:1rem 2rem}}@media (min-width:720px){.article-detail__body p{font-size:1.25rem;line-height:1.75;max-width:640px;margin:1rem auto}}.article-detail__body img{display:block;margin:.5rem auto;width:100%}@media (min-width:480px){.article-detail__body img{margin:2rem auto}}.article-detail__body a{text-decoration:underline}.article-detail__body .article-detail__small-text{font-size:.9rem;margin:1rem}@media (min-width:480px){.article-detail__body .article-detail__small-text{margin:1rem 2rem}}@media (min-width:720px){.article-detail__body .article-detail__small-text{font-size:1rem;max-width:640px;margin:1rem auto}}.article-detail__comments{padding:1rem;max-width:640px;margin:0 auto}.article-listing{max-width:560px;margin:1rem .75rem;-webkit-columns:1;columns:1}@media (min-width:600px){.article-listing{margin:1rem auto}}@media (min-width:1080px){.article-listing{max-width:960px;margin:2rem auto;-webkit-columns:2;columns:2}}@media (min-width:1440px){.article-listing{max-width:1280px;-webkit-columns:3;columns:3}}.article-teaser{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0 0 2.5rem;-webkit-column-break-inside:avoid;break-inside:avoid;page-break-inside:avoid;width:100%;position:relative}@media (min-width:1440px){.browser-chrome .article-teaser{display:block}}.article-teaser__summary{position:relative;font-family:Mukta;font-size:14px;line-height:1.75;letter-spacing:.03rem;margin:0;padding:1rem 1rem 2.25rem;color:#212121}@media (min-width:480px){.article-teaser__summary{font-size:16px}}@media (min-width:560px){.article-teaser__summary{border-bottom:1px solid #f0f0f0;border-right:1px solid #f0f0f0;border-left:1px solid #f0f0f0;border-radius:5px}}.article-teaser__read-more{position:absolute;right:1rem;bottom:1rem;text-decoration:underline;text-align:right;line-height:1;font-size:12px}@media (min-width:480px){.article-teaser__read-more{font-size:14px}}.article-teaser__image-wrapper{position:relative;overflow:hidden}.article-teaser__image{position:absolute;width:100%;bottom:0}.feature-cta{height:400px;position:relative;margin:0}.feature-cta:first-child{margin-top:2rem}@media (min-width:1080px){.feature-cta{margin:2rem 0 2rem}.feature-cta:last-child{margin-bottom:0}}@media (min-width:1200px){.feature-cta{max-width:1280px;margin:2rem auto}}.feature-cta__background{width:100%;height:100%;position:absolute;top:0;background-position:center;background-size:cover;background-repeat:no-repeat;-webkit-filter:brightness(.3);filter:brightness(.3);z-index:-1}.feature-cta__content{display:table-cell;vertical-align:middle;text-align:center;padding:1rem}.feature-cta__content-wrapper{display:table;width:100%;height:400px}@media (min-width:1080px){.feature-cta__content-wrapper{width:400px}}.feature-cta__content-link{color:#fff}.feature-cta__button{display:block;font-size:2rem;font-weight:700}.feature-cta__description{display:block;max-width:200px;margin:0 auto;font-size:.85rem}.feature-cta__copyright{position:absolute;right:10px;bottom:10px;color:#fff;font-size:.9rem}.feature-cta__copyright a{color:#fff;text-decoration:underline}.hero{text-align:center}.hero__title{display:inline-block;line-height:2rem;font-size:2rem;padding:.5rem;background:#212121;color:#fff}@media (min-width:720px){.hero__title{padding:1rem;line-height:3rem;font-size:3rem}}@media (min-width:1080px){.hero__title{line-height:4rem;font-size:4rem}}.field{position:relative}.field__label{position:absolute;font-size:.85rem;font-weight:700;top:1.25rem;left:.5rem;-webkit-transition:top .3s ease,font-size .3s ease;-o-transition:top .3s ease,font-size .3s ease;transition:top .3s ease,font-size .3s ease}.field__label--active{font-size:.75rem;top:0}.field__input{border:0;width:100%;padding:1.25rem .5rem .5rem;font-size:.95rem;border-bottom:3px solid #3c3c3c}.footer{height:100px;background:#212121;margin:2rem 0 0}.footer__copyright{line-height:100px;color:#fff;font-size:.9rem;text-align:center}@media (min-width:720px){.footer__copyright{text-align:left;font-size:1rem;margin:0 2rem}}.form-two-column{max-width:320px;margin:2rem auto}@media (min-width:640px){.form-two-column{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;max-width:560px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}}.form-two-column__field{-webkit-box-flex:0;-ms-flex:0 0 47.5%;flex:0 0 47.5%;margin-bottom:1rem}.form-two-column__field:last-child{margin-bottom:0}.form-two-column__submit{margin:1rem 0}.layout-max{max-width:720px;margin:0 1rem;position:relative}.layout-max ul{padding-left:1.25rem}.layout-max li{margin-bottom:.5rem}.layout-max a{text-decoration:underline;color:#3c3c3c}.layout-max a:hover{color:#212121}.layout-max p{font-family:Mukta;font-size:1.15rem;line-height:1.6;letter-spacing:.02rem}@media (min-width:760px){.layout-max{margin:0 auto}}.navigation{background:#212121}.navigation__logo{-webkit-filter:invert(100%);filter:invert(100%);width:30px;height:30px}.navigation__nav{max-width:1080px;margin:0 auto;padding:1.5rem}.navigation__nav-items{float:right}.navigation__language,.navigation__nav-item{color:#fff;height:30px;line-height:30px;margin-right:.5rem;font-size:.9rem}@media (min-width:480px){.navigation__language,.navigation__nav-item{margin-right:1rem;font-size:1rem}}.navigation__language:last-child,.navigation__nav-item:last-child{margin-right:0}.navigation__language{margin-left:1rem}@media (min-width:480px){.navigation__language{margin-left:2rem}}.search{max-width:960px;margin:2rem auto;text-align:center}.search__field input{padding-top:.75rem;padding-bottom:.75rem;padding-left:2.5rem;font-family:Montserrat,sans-serif}.search__icon{position:absolute;left:.75rem;top:.85rem;width:1rem;height:1rem;fill:#3c3c3c}.search__suggestions{margin:2rem 0;font-weight:700;font-size:.9rem}.search__results{margin:2rem auto;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.search__result{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:1;-ms-flex:1 1 100%;flex:1 1 100%;text-align:left;-webkit-box-shadow:0 10px 15px rgba(50,50,93,.1),0 5px 15px rgba(0,0,0,.07);box-shadow:0 10px 15px rgba(50,50,93,.1),0 5px 15px rgba(0,0,0,.07);margin-bottom:3rem;border-radius:5px;overflow:hidden}@media (min-width:560px){.search__result{-webkit-box-flex:0;-ms-flex:0 1 47%;flex:0 1 47%}}.search__result a{text-decoration:inherit}.search__image{width:100%;height:10rem;background-size:cover;background-position:center;background-repeat:no-repeat}.search__result h3{margin:1rem;font-size:1rem}.search__phone{font-size:.8rem;margin:1rem}.search__price{font-size:1.25rem;margin:1rem}.search__location{font-size:.8rem;margin:1rem}.submit{font-size:.9rem;font-weight:700;background:#3c3c3c;color:#fff;border:0;border-radius:0;padding:.5rem 1rem} \ No newline at end of file diff --git a/themes/humans-of-nosara/static/data/c21_property.json b/themes/humans-of-nosara/static/data/c21_property.json new file mode 100644 index 0000000..0f7c19e --- /dev/null +++ b/themes/humans-of-nosara/static/data/c21_property.json @@ -0,0 +1 @@ +{"data":[{"uid":"c21_property_0","name":"Beachfront with Direct Access to Playas Pelada and Guiones","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2018/10/Hectare-244x163.jpg"],"price":3999999,"url":"https://century21nosara.com/property/beachfront-with-direct-access-to-playas-pelada-and-guiones/"},{"uid":"c21_property_1","name":"‘El Villaggio’","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/06/GFS_1672-3093826161-O-244x163.jpg"],"price":3950000,"url":"https://century21nosara.com/property/el-villaggio/"},{"uid":"c21_property_2","name":"Boutique Beachfront Hotel Right on Playa Guiones","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2017/07/DJI_0318-XL-244x163.jpg"],"price":3200000,"url":"https://century21nosara.com/property/boutique-beachfront-hotel-right-on-playa-guiones/"},{"uid":"c21_property_3","name":"Azul Ocean Club","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/11/AzulOceanClub1213_0453-244x163.jpg"],"price":2950000,"url":"https://century21nosara.com/property/azul-ocean-club/"},{"uid":"c21_property_4","name":"Hacienda Guiones","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2017/06/IMG_2702-244x163.jpg"],"price":2760000,"url":"https://century21nosara.com/property/hacienda-guiones/"},{"uid":"c21_property_5","name":"Beach Front in Ostional","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/05/Wow_View_6ha_Ostional52f917c7784ee-244x163.jpg"],"price":2400000,"url":"https://century21nosara.com/property/beach-front-in-ostional/"},{"uid":"c21_property_6","name":"Vistas Del Mar","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/05/recovered_jpeg_digital_camera_155_1317059590-244x163.jpg"],"price":1850000,"url":"https://century21nosara.com/property/vistas-del-mar/"},{"uid":"c21_property_7","name":"Living Hotel","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/05/DSC_1559_60_61-X256df1256e2e75-244x163.jpg"],"price":1850000,"url":"https://century21nosara.com/property/living-hotel/"},{"uid":"c21_property_8","name":"Sunset Peak","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2017/03/DSC_3474_5_6-L-244x163.jpg"],"price":1725000,"url":"https://century21nosara.com/property/sunset-peak/"},{"uid":"c21_property_9","name":"Los Ceniceros Ranch","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2017/11/Rfinca-2-244x163.jpg"],"price":1500000,"url":"https://century21nosara.com/property/los-ceniceros-ranch/"},{"uid":"c21_property_10","name":"Costa Rica Dream House","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2017/07/GFS_1163_4_5-244x163.jpg"],"price":1450000,"url":"https://century21nosara.com/property/costa-rica-dream-house/"},{"uid":"c21_property_11","name":"Guiones Beachfront!!!","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2017/07/GFS3397_8_9-XL-244x163.jpg"],"price":1400000,"url":"https://century21nosara.com/property/guiones-beachfront/"},{"uid":"c21_property_12","name":"Shangri La","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/11/DJI_0288-244x163.jpg"],"price":1395000,"url":"https://century21nosara.com/property/shangri-la/"},{"uid":"c21_property_13","name":"Villa Clara Vista","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2017/03/Villa-Clara-Vista-Pool-View-244x163.jpg"],"price":1350000,"url":"https://century21nosara.com/property/villa-clara-vista/"},{"uid":"c21_property_14","name":"Best Ocean View Available!","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2019/01/DJI_0450-X2-488x326.jpg"],"price":1299000,"url":"https://century21nosara.com/property/best-ocean-view-available/"},{"uid":"c21_property_15","name":"The House with the Yellow Door","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2018/11/DSCF0003_4_5_6_7-X2-244x163.jpg"],"price":1295000,"url":"https://century21nosara.com/property/the-house-with-the-yellow-door/"},{"uid":"c21_property_16","name":"Casa Caracoles: 2 Ocean View Homes","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2018/06/GFS_6838_39_40-XL-244x163.jpg"],"price":1200000,"url":"https://century21nosara.com/property/casa-caracoles-2-ocean-view-homes/"},{"uid":"c21_property_17","name":"150 Acres of Fabulous Ocean Views","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2018/02/DJI_0175-X2-244x163.jpg"],"price":1200000,"url":"https://century21nosara.com/property/150-acres-of-fabulous-ocean-views/"},{"uid":"c21_property_18","name":"Development Property with Easy Access to Guiones and Pelada","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2018/01/DJI_0055-X2-244x163.jpg"],"price":1100000,"url":"https://century21nosara.com/property/development-property-with-access-to-2-beaches/"},{"uid":"c21_property_19","name":"Estate Property with View, Location and Size","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/05/DSC_4553-L566086996d7c0-244x163.jpg"],"price":995000,"url":"https://century21nosara.com/property/estate-property-with-view-location-and-size/"},{"uid":"c21_property_20","name":"New, upscale Canopy House","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2017/04/TreeHouseVilla_52-244x163.jpg"],"price":990000,"url":"https://century21nosara.com/property/tree-house-villa/"},{"uid":"c21_property_21","name":"Casa Banda","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2018/05/GFS_3248_49_50_51_52-X2-244x163.jpg"],"price":990000,"url":"https://century21nosara.com/property/casa-banda/"},{"uid":"c21_property_22","name":"Villa La Ventana","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/07/2016_01_01E-12568ad93693731-1024x682-244x163.jpg"],"price":975000,"url":"https://century21nosara.com/property/villa-la-ventana/"},{"uid":"c21_property_23","name":"Casa Verano","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/07/OFA6010-244x163.jpg"],"price":975000,"url":"https://century21nosara.com/property/casa-verano/"},{"uid":"c21_property_24","name":"Beachfront Lot in K Section","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2018/12/DJI_0528-1-488x326.jpg"],"price":950000,"url":"https://century21nosara.com/property/beachfront-lot-in-k-section/"},{"uid":"c21_property_25","name":"Open Architecture and a View too!","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2019/01/Donald-casa-2018-12-11-Nosara-Photo-Enric-Coromina0014-488x326.jpg"],"price":939000,"url":"https://century21nosara.com/property/open-architecture-and-a-view-too/"},{"uid":"c21_property_26","name":"Beautiful Custom Home Overlooking the Pacific","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/05/GFS_2707-3109628083-O53268550e329d-244x163.jpg"],"price":925000,"url":"https://century21nosara.com/property/beautiful-custom-home-overlooking-the-pacific/"},{"uid":"c21_property_27","name":"Three-Sixty Views","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2018/09/DJI_0042-X2-244x163.jpg"],"price":895000,"url":"https://century21nosara.com/property/three-sixty-views/"},{"uid":"c21_property_28","name":"Boca Nosara Home","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2018/12/IMG_5289-488x326.jpg"],"price":840000,"url":"https://century21nosara.com/property/boca-nosara-home-business/"},{"uid":"c21_property_29","name":"Modern-Tropical Home with Ocean View","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2018/05/DJI_0057-X2-244x163.jpg"],"price":799000,"url":"https://century21nosara.com/property/modern-tropical-home-with-ocean-view/"},{"uid":"c21_property_30","name":"Dos Gatos","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/05/p1010775_1335905180-244x163.jpg"],"price":795000,"url":"https://century21nosara.com/property/dos-gatos/"},{"uid":"c21_property_31","name":"Alta Vista","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/05/dsc00037_1319485357-244x163.jpg"],"price":750000,"url":"https://century21nosara.com/property/alta-vista/"},{"uid":"c21_property_32","name":"Miramunt Ocean View House","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2019/03/DJI_0004-488x326.jpg"],"price":748000,"url":"https://century21nosara.com/property/miramunt-ocean-view-house/"},{"uid":"c21_property_33","name":"Casa Dulce","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2018/12/DJI_0086-X2-488x326.jpg"],"price":699000,"url":"https://century21nosara.com/property/casa-dulce/"},{"uid":"c21_property_34","name":"Finca Estrella","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/05/i-2ntnhl2-m_1375120459-244x163.jpg"],"price":675000,"url":"https://century21nosara.com/property/finca-estrella/"},{"uid":"c21_property_35","name":"Large lot in Playa Pelada, multiple options","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2018/10/IMG_2068-244x163.jpg"],"price":655000,"url":"https://century21nosara.com/property/large-lot-in-playa-pelada-multiple-options/"},{"uid":"c21_property_36","name":"Casa Sunrise","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/07/patio_view_looking_north_1374514959-1024x684-244x163.jpg"],"price":650000,"url":"https://century21nosara.com/property/casa-sunrise/"},{"uid":"c21_property_37","name":"Casa Sea Breeze","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/05/costa_rica_tropical_life_1374517448-244x163.jpg"],"price":650000,"url":"https://century21nosara.com/property/casa-sea-breeze/"},{"uid":"c21_property_38","name":"The River House","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/05/IMG_9466-Copy-900x5005596dfbbefd87-244x163.jpg"],"price":649000,"url":"https://century21nosara.com/property/the-river-house/"},{"uid":"c21_property_39","name":"Casa Chic","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2019/01/Casa-Chic-Nite-pool-488x326.jpg"],"price":629000,"url":"https://century21nosara.com/property/casa-chic/"},{"uid":"c21_property_40","name":"Casa Estrella View Home on Top of the Mountain","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2018/12/7-488x326.jpg"],"price":615000,"url":"https://century21nosara.com/property/view-home-on-top-of-the-mountain/"},{"uid":"c21_property_41","name":"Santa Marta Panoramic Views","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2017/02/DJI_0251_2_3_4_5-XL-244x163.jpg"],"price":600000,"url":"https://century21nosara.com/property/santa-marta-panoramic-views/"},{"uid":"c21_property_42","name":"Casa Sunset","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/05/pool_and_rancho_1374525759-244x163.jpg"],"price":600000,"url":"https://century21nosara.com/property/casa-playa-sunset/"},{"uid":"c21_property_43","name":"Teak Pacific- Income Producing Property, Priced To Sell","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2018/06/DJI_0155-244x163.jpg"],"price":579000,"url":"https://century21nosara.com/property/teak-pacific-boutique-bb/"},{"uid":"c21_property_44","name":"Modern Two Home Vacation Rental, 4 Minutes to the Beach","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2019/03/DSCF2442_3_4_5_6-488x326.jpg"],"price":575000,"url":"https://century21nosara.com/property/modern-two-home-vacation-rental-4-minutes-to-the-beach/"},{"uid":"c21_property_45","name":"Casa Ocean View","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/05/view_from_driveway_1374524127-244x163.jpg"],"price":550000,"url":"https://century21nosara.com/property/casa-ocean-view/"},{"uid":"c21_property_46","name":"Casa Uno","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/06/Casa-Uno-feature-244x163.jpg"],"price":549000,"url":"https://century21nosara.com/property/casa-uno/"},{"uid":"c21_property_47","name":"Cerdo Lerdo 3","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2018/08/GFS0647_48_49_50_51-X2-244x163.jpg"],"price":549000,"url":"https://century21nosara.com/property/cerdo-lerdo-3/"},{"uid":"c21_property_48","name":"Guiones Sanctuary","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2019/02/ES22-488x326.jpg"],"price":545000,"url":"https://century21nosara.com/property/guiones-sanctuary/"},{"uid":"c21_property_49","name":"Four Winds","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/05/Four_Winds572234b672d8b-244x163.jpg"],"price":525000,"url":"https://century21nosara.com/property/four-winds/"},{"uid":"c21_property_50","name":"G Section Beach Home","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2018/09/DJI_0023-X2-244x163.jpg"],"price":525000,"url":"https://century21nosara.com/property/g-section-beach-home/"},{"uid":"c21_property_51","name":"Finca Vida Del Campo","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/05/new_file_058_1317832316-244x163.jpg"],"price":499000,"url":"https://century21nosara.com/property/finca-vida-del-campo/"},{"uid":"c21_property_52","name":"K Section With Elevation","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/05/DSC_739957223b2032162-244x163.jpg"],"price":499000,"url":"https://century21nosara.com/property/k-section-with-elevation/"},{"uid":"c21_property_53","name":"GBC Lot 39 Beautiful Hillside Lot, Close to the Beach","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2019/02/DJI_0664-488x326.jpg"],"price":499000,"url":"https://century21nosara.com/property/gbc-lot-39-beautiful-hillside-lot-minutes-to-the-beach/"},{"uid":"c21_property_54","name":"Beach Front Condo","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/05/Playa_Pelada_looking_north52e18d5e6d531-244x163.jpg"],"price":495000,"url":"https://century21nosara.com/property/beach-front-condo/"},{"uid":"c21_property_55","name":"Above Nosara","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/11/Surfing-Nosara-2016_09_05B-7-244x163.jpg"],"price":485000,"url":"https://century21nosara.com/property/above-nosara/"},{"uid":"c21_property_56","name":"Animal Farm in Delicias","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2018/02/GFS_4727-X2-244x163.jpg"],"price":479000,"url":"https://century21nosara.com/property/animal-farm-in-delicias/"},{"uid":"c21_property_57","name":"Rental Machine Close to the Beach","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2019/02/DSCF1152_3_4_5_6-X2-488x326.jpg"],"price":478000,"url":"https://century21nosara.com/property/rental-machine-close-to-the-beach/"},{"uid":"c21_property_58","name":"Finca Palmares","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/05/DSC_7403-X35679a6af934c8-244x163.jpg"],"price":455000,"url":"https://century21nosara.com/property/finca-palmares/"},{"uid":"c21_property_59","name":"Derrymore Eco Finca","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2019/03/4-488x326.jpg"],"price":450000,"url":"https://century21nosara.com/property/derrymore-eco-finca/"},{"uid":"c21_property_60","name":"Casa Modelo- Huge Property, Walk to the Beach, on a Cul De Sac","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2018/12/DJI_0031_2_3_1-488x326.jpg"],"price":450000,"url":"https://century21nosara.com/property/casa-modelo-huge-property-walk-to-the-beach-on-a-cul-de-sac/"},{"uid":"c21_property_61","name":"Blue Bay San Juanillo","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/05/san_juanillo_2_1_ha_019_1316978309-244x163.jpg"],"price":450000,"url":"https://century21nosara.com/property/blue-bay-san-juanillo/"},{"uid":"c21_property_62","name":"Casa Nomad","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2018/08/DSC_0024-244x163.jpg"],"price":440000,"url":"https://century21nosara.com/property/casa-nomad/"},{"uid":"c21_property_63","name":"Casa David","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/12/CasaDavid_28-1-244x163.jpg"],"price":437000,"url":"https://century21nosara.com/property/casa-david/"},{"uid":"c21_property_64","name":"Casa Gabriel","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2018/09/GFS3251_2_3_4_5-244x163.jpg"],"price":435000,"url":"https://century21nosara.com/property/casa-gabriel/"},{"uid":"c21_property_65","name":"Unspoiled “Finca La Rosa” at Rio Montana","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2018/07/IMG_1168-244x163.jpg"],"price":385000,"url":"https://century21nosara.com/property/unspoiled-finca-la-rosa-at-rio-montana/"},{"uid":"c21_property_66","name":"Spacious Hilltop Jungle House","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2018/03/GFS_7997_7998_7999_8000_8001-X2-244x163.jpg"],"price":379000,"url":"https://century21nosara.com/property/spacious-hilltop-jungle-house/"},{"uid":"c21_property_67","name":"Beachfront Home","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2018/12/DSCF2441_2_3_4_5-X2-488x326.jpg"],"price":369000,"url":"https://century21nosara.com/property/beachfront-home/"},{"uid":"c21_property_68","name":"Lovely Country House","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2017/04/DJI_0331_2_3_4_5-244x163.jpg"],"price":350000,"url":"https://century21nosara.com/property/lovely-country-house/"},{"uid":"c21_property_69","name":"Twenty Acres!","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/05/LP_Googl_Earth_2537cdc5f72617-244x163.jpg"],"price":350000,"url":"https://century21nosara.com/property/twenty-acres/"},{"uid":"c21_property_70","name":"One of few lots left in K-section","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2018/07/East-6-244x163.jpg"],"price":335000,"url":"https://century21nosara.com/property/one-of-few-lots-left-in-k-section/"},{"uid":"c21_property_71","name":"K-section lot for an easy build","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2018/07/West-4-244x163.jpg"],"price":330000,"url":"https://century21nosara.com/property/k-section-lot-for-an-easy-build/"},{"uid":"c21_property_72","name":"Commercial Or Mixed Use Properties in the heart of Guiones!","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2017/02/IMG_3371-3-244x163.jpg"],"price":315000,"url":"https://century21nosara.com/property/commercial-property-in-the-heart-of-guiones/"},{"uid":"c21_property_73","name":"Beachfront Lot in Gated Community","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/12/GFS_7450-L-244x163.jpg"],"price":299000,"url":"https://century21nosara.com/property/beachfront-lot-in-gated-community/"},{"uid":"c21_property_74","name":"Beachfront Playa Pelada, Can’t Beat this Location","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2018/12/DSC_1096_7_8-1-488x326.jpg"],"price":299000,"url":"https://century21nosara.com/property/beachfront-playa-pelada-cant-beat-this-location/"},{"uid":"c21_property_75","name":"Unbelievable Panoramic Ocean Views","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2018/06/IMG_0967-244x163.jpg"],"price":280000,"url":"https://century21nosara.com/property/unbelievable-panoramic-ocean-views/"},{"uid":"c21_property_76","name":"Stunning Ocean View Lot in Bosque Verde","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2018/12/DSCF2614_5_6_7_8-1-488x326.jpg"],"price":275000,"url":"https://century21nosara.com/property/stunning-ocean-view-lot-in-bosque-verde/"},{"uid":"c21_property_77","name":"Jungle Lot Close to the Beach!","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2019/01/DSCF5986_87_88_89_90-X2-488x326.jpg"],"price":275000,"url":"https://century21nosara.com/property/jungle-lot-close-to-the-beach/"},{"uid":"c21_property_78","name":"Ocean View Lot in Paradise","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2019/02/DSCF2699_700_701_702_703-488x326.jpg"],"price":250000,"url":"https://century21nosara.com/property/ocean-view-lot-in-paradise/"},{"uid":"c21_property_79","name":"Beach Casita- Three Minute Walk to the Sand!","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2017/06/GFS2003_4_5-XL-244x163.jpg"],"price":245000,"url":"https://century21nosara.com/property/beach-casita-three-minute-walk-to-the-sand/"},{"uid":"c21_property_80","name":"Ocean View lots in Garza!","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2017/02/IMG_3430-3-e1488230207366-244x163.jpg"],"price":230000,"url":"https://century21nosara.com/property/ocean-view-property-in-garza-with-lots-of-privacy/"},{"uid":"c21_property_81","name":"Paseo Del Sol 3 Bedroom- 2.5BA","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/05/front_paseo54bd7d1e07ae8-244x163.jpg"],"price":229000,"url":"https://century21nosara.com/property/paseo-del-sol-3-bedroom-2-5ba/"},{"uid":"c21_property_82","name":"Lot for Sale Close to Playa Guiones & Nosara","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/05/Esperanza-Costa-Rica-Lot-for-sale-Map-zoom541f97a8afae6-244x163.jpg"],"price":225000,"url":"https://century21nosara.com/property/lot-for-sale-close-to-playa-guiones-nosara/"},{"uid":"c21_property_83","name":"A Minute Walk to the Sand in Playa Pelada","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2018/12/DSC_1093_4_5-1-488x326.jpg"],"price":215000,"url":"https://century21nosara.com/property/a-minute-walk-to-the-sand-in-playa-pelada/"},{"uid":"c21_property_84","name":"Top of the World!","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/12/Young4-244x163.jpeg"],"price":199950,"url":"https://century21nosara.com/property/top-of-the-world/"},{"uid":"c21_property_85","name":"Beach Lot Near Bodhi Tree","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2019/02/IMG_5184-488x326.jpg"],"price":199000,"url":"https://century21nosara.com/property/beach-lot-near-bodhi-tree/"},{"uid":"c21_property_86","name":"Nosara Hills Lot 4","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/05/DSC_8861-X2559adcd55188a-244x163.jpg"],"price":198975,"url":"https://century21nosara.com/property/nosara-hills-lot-4/"},{"uid":"c21_property_87","name":"Condo Manta Ray","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2018/09/GFS1491_2_3_4_5-X2-244x163.jpg"],"price":175000,"url":"https://century21nosara.com/property/condo-manta-ray/"},{"uid":"c21_property_88","name":"Casa Cocobolo","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/05/Pitos_Palace_Front_Walk55b2960c545a5-244x163.jpg"],"price":169000,"url":"https://century21nosara.com/property/casa-cocobolo/"},{"uid":"c21_property_89","name":"Incredible commercial or mixed use lot ready to build","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2018/11/DSCF9507-X2-244x163.jpg"],"price":169000,"url":"https://century21nosara.com/property/c-78/"},{"uid":"c21_property_90","name":"Marco’s Ostional Ocean View Lot","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/05/dsc05400_1319129779-244x163.jpg"],"price":165000,"url":"https://century21nosara.com/property/marcos-ostional-ocean-view-lot/"},{"uid":"c21_property_91","name":"Guiones Lot Perfect for Surf Casita","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2018/12/DSCF0860_1_2_3_4-X2-488x326.jpg"],"price":165000,"url":"https://century21nosara.com/property/guiones-lot-perfect-for-surf-casita/"},{"uid":"c21_property_92","name":"Large Lot with View of Surf In Ostional","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/06/Ostional-Chal-12-244x163.jpg"],"price":165000,"url":"https://century21nosara.com/property/large-lot-with-view-of-surf-in-ostional/"},{"uid":"c21_property_93","name":"5 Acres and 8 Minutes to the Beach","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2018/01/DJI_0094-X2-244x163.jpg"],"price":160000,"url":"https://century21nosara.com/property/5-acres-and-8-minutes-to-the-beach/"},{"uid":"c21_property_94","name":"Lot #41 Vista Bella Development – Marbella Costa Rica","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/05/Vista-Bella-Master-Plan-Marbella-Costa-Rica-Land-for-sale54a44f480ac03-244x163.jpg"],"price":159000,"url":"https://century21nosara.com/property/lot-41-vista-bella-development-marbella-costa-rica/"},{"uid":"c21_property_95","name":"Lot #100 Vista Bella Development – Marbella Costa Rica","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/05/Vista-Bella-Master-Plan-Marbella-Costa-Rica-Land-for-sale54a44f480ac03-244x163.jpg"],"price":159000,"url":"https://century21nosara.com/property/lot-100-vista-bella-development-marbella-costa-rica/"},{"uid":"c21_property_96","name":"Mar Azul #1","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/05/DSC_8901-X2559aea03759f2-244x163.jpg"],"price":153750,"url":"https://century21nosara.com/property/mar-azul-1/"},{"uid":"c21_property_97","name":"Lot #99 Vista Bella Development – Marbella Costa Rica","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/05/Vista-Bella-Master-Plan-Marbella-Costa-Rica-Land-for-sale54a44f480ac03-244x163.jpg"],"price":150000,"url":"https://century21nosara.com/property/lot-99-vista-bella-development-marbella-costa-rica/"},{"uid":"c21_property_98","name":"Nosara Hills Lot 15","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/05/DSC_4265-L564215debf948-244x163.jpg"],"price":149000,"url":"https://century21nosara.com/property/nosara-hills-lot-15/"},{"uid":"c21_property_99","name":"Elevated lot in the Highlands of Esperanza","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2017/05/IMG_2435-244x163.jpg"],"price":144000,"url":"https://century21nosara.com/property/elevated-lot-in-the-highlands-of-esperanza/"},{"uid":"c21_property_100","name":"Diamond Point","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/05/DSC_4302-L53c951f3d54f4-244x163.jpg"],"price":140000,"url":"https://century21nosara.com/property/diamond-point/"},{"uid":"c21_property_101","name":"Lot #75 Vista Bella Development – Marbella Costa Rica","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/05/Vista-Bella-Master-Plan-Marbella-Costa-Rica-Land-for-sale54a44f480ac03-244x163.jpg"],"price":139000,"url":"https://century21nosara.com/property/lot-75-vista-bella-development-marbella-costa-rica/"},{"uid":"c21_property_102","name":"Bosque Verde Ocean View","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/06/DSC_0674-1-244x163.jpg"],"price":135000,"url":"https://century21nosara.com/property/bosque-verde-ocean-view/"},{"uid":"c21_property_103","name":"Huge Lot Priced to Sell!","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/08/GFS_3231-XL-244x163.jpg"],"price":135000,"url":"https://century21nosara.com/property/huge-lot-priced-to-sell/"},{"uid":"c21_property_104","name":"Green Acres Is The Place To Be","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/06/DJI_0106-X2-244x163.jpg"],"price":130000,"url":"https://century21nosara.com/property/green-acres-is-the-place-to-be/"},{"uid":"c21_property_105","name":"EE Section Lot","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2019/02/20190215_205949082_iOS-488x326.jpg"],"price":125000,"url":"https://century21nosara.com/property/ee-section-lot/"},{"uid":"c21_property_106","name":"Affordable lot with ocean and valley views!","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2017/05/IMG_4182-e1495219471875-244x163.jpg"],"price":120000,"url":"https://century21nosara.com/property/affordable-lot-with-ocean-and-valley-views/"},{"uid":"c21_property_107","name":"Ocean View in San Juanillo Costa Rica","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/05/Costa-Rica-Property-For-Sale-San-Juanillo-153b88e9c9104b-244x163.jpg"],"price":120000,"url":"https://century21nosara.com/property/ocean-view-in-san-juanillo-costa-rica/"},{"uid":"c21_property_108","name":"EE Section with Elevation","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2017/10/EE-18-2-244x163.jpg"],"price":119000,"url":"https://century21nosara.com/property/ee-section-with-elevation/"},{"uid":"c21_property_109","name":"Lot #1 Vista Bella Development – Marbella Costa Rica","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/05/Vista-Bella-Master-Plan-Marbella-Costa-Rica-Land-for-sale54a44f480ac03-244x163.jpg"],"price":119000,"url":"https://century21nosara.com/property/lot-1-vista-bella-development-marbella-costa-rica/"},{"uid":"c21_property_110","name":"Ocean View Property in Gated Community","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/05/GFS_2612-3109724080-O53222f92c8df5-244x163.jpg"],"price":115000,"url":"https://century21nosara.com/property/ocean-view-property-in-gated-community/"},{"uid":"c21_property_111","name":"Private Ocean View Hilltop in Ostional","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/06/GFS_8677-XL-244x163.jpg"],"price":99000,"url":"https://century21nosara.com/property/private-ocean-view-hilltop-in-ostional/"},{"uid":"c21_property_112","name":"Ocean Breeze & Ocean Views","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2018/04/IMG_0569-244x163.jpg"],"price":99000,"url":"https://century21nosara.com/property/ocean-breeze-ocean-views/"},{"uid":"c21_property_113","name":"Beach Community Property","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/05/GFS_2566-3109717504-O5321eaff76efe-244x163.jpg"],"price":98000,"url":"https://century21nosara.com/property/beach-community-property/"},{"uid":"c21_property_114","name":"Privacy and Ocean Views in San Juanillo… Best deal!!","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2018/06/foto-244x163.jpg"],"price":85000,"url":"https://century21nosara.com/property/privacy-and-ocean-views-in-san-juanillo/"},{"uid":"c21_property_115","name":"Large Lot Near DMA","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/05/lot356056dfa48edf-244x163.jpg"],"price":79000,"url":"https://century21nosara.com/property/large-lot-near-dma/"},{"uid":"c21_property_116","name":"EE section flat lot","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2018/08/IMG_1516-244x163.jpg"],"price":77000,"url":"https://century21nosara.com/property/ee-section-flat-lot/"},{"uid":"c21_property_117","name":"Selvamar Lot close to DMA","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2018/06/IMG_0902-244x163.jpg"],"price":75000,"url":"https://century21nosara.com/property/selvamar-lot-close-to-dma/"},{"uid":"c21_property_118","name":"Beautiful Wooded & Flat Property Near Del Mar Academy","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2018/04/Foto-11-244x163.jpg"],"price":75000,"url":"https://century21nosara.com/property/beautiful-wooded-flat-property-near-del-mar-academy/"},{"uid":"c21_property_119","name":"Nosara Hills Lot 8","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/05/DSC_8898-X2559ad68dd05e1-244x163.jpg"],"price":64610,"url":"https://century21nosara.com/property/nosara-hills-lot-8/"},{"uid":"c21_property_120","name":"Two flat lots in Pelada close to everything!","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2018/06/Master-Plan-453x326.jpg"],"price":52000,"url":"https://century21nosara.com/property/land-in-pelada-close-to-everything/"},{"uid":"c21_property_121","name":"Large property for sale in Marbella, Costa Rica","location":{"name":"Nosara","geo":null},"images":["https://century21nosara.com/wp-content/uploads/2016/05/surfing-marbella-costa-rica_1376285233-244x163.jpg"],"price":8,"url":"https://century21nosara.com/property/large-property-for-sale-in-marbella-costa-rica/"}],"type":"real_estate","name":["Real Estate","Property","Properties"]} \ No newline at end of file diff --git a/themes/humans-of-nosara/static/data/hon_charity.json b/themes/humans-of-nosara/static/data/hon_charity.json new file mode 100644 index 0000000..e04c2b7 --- /dev/null +++ b/themes/humans-of-nosara/static/data/hon_charity.json @@ -0,0 +1 @@ +{"data":[{"uid":"hon_charity_0","name":"Humans of Nosara","image":"https://res.cloudinary.com/humansofnosara/image/upload/c_scale,fl_progressive,w_1280/v1547562931/playa-pelada-nosara1_nvf5ne.jpg","location":{"name":"Nosara","geo":null},"url":"https://www.paypal.com/cgi-bin/webscr?cmd=_donations¤cy_code=USD&business=davidedisch@gmail.com&item_name=Donation+to+Humans+of+Nosara"},{"uid":"hon_charity_1","name":"Vive el Sueño","image":"https://res.cloudinary.com/humansofnosara/image/upload/c_scale,fl_progressive,w_1280/v1507049094/Vive%20el%20Sueno/vive-el-sueno_yzyocn.jpg","location":{"name":"Nosara","geo":null},"url":"https://www.viveelsuenocr.org/"},{"uid":"hon_charity_2","name":"Nosara Food Bank","image":"https://res.cloudinary.com/humansofnosara/image/upload/fl_progressive/v1504811420/Nosara%20Food%20Bank/nosara-food-bank.jpg","location":{"name":"Nosara","geo":null},"url":"https://www.nosarafoodbank.org/"},{"uid":"hon_charity_3","name":"Nosara Firefighters","image":"https://res.cloudinary.com/humansofnosara/image/upload/fl_progressive/v1504811443/Nosara%20Firefighters/nosara-firefighters.jpg","location":{"name":"Nosara","geo":null},"url":"https://amigosofcostarica.org/product/nosara-firefighters/"},{"uid":"hon_charity_4","name":"Nosara Recycling","image":"https://res.cloudinary.com/humansofnosara/image/upload/fl_progressive/v1504811483/Nosara%20Recycling/nosara-recycling.jpg","location":{"name":"Nosara","geo":null},"url":"https://amigosofcostarica.org/product/nosara-recycling-association/"},{"uid":"hon_charity_5","name":"Nosara Civic Association","image":"https://res.cloudinary.com/humansofnosara/image/upload/fl_progressive/v1504811467/Nosara%20Civic%20Association/nosara-civic-association.jpg","location":{"name":"Nosara","geo":null},"url":"http://www.nosaracivicassociation.com/become-member/"}],"type":"charity","name":["Charity","Charities"]} \ No newline at end of file diff --git a/themes/humans-of-nosara/static/data/hon_interviewee.json b/themes/humans-of-nosara/static/data/hon_interviewee.json new file mode 100644 index 0000000..e7d7ecf --- /dev/null +++ b/themes/humans-of-nosara/static/data/hon_interviewee.json @@ -0,0 +1 @@ +{"data":[{"uid":"hon_interviewee_0","name":"Juana Arrieta Lopez","image":"https://res.cloudinary.com/humansofnosara/image/upload/c_scale,fl_progressive,w_720/v1506389190/Juanita%20Arrieta/Juanita-Action.jpg","location":{"name":"Nosara","geo":null},"phone":null,"email":null},{"uid":"hon_interviewee_1","name":"Rebecca Schmidt","image":"https://res.cloudinary.com/humansofnosara/image/upload/c_scale,fl_progressive,w_720/v1507009331/Rebecca%20Schmidt/Rebecca-Profile.jpg","location":{"name":"Nosara","geo":null},"phone":null,"email":null},{"uid":"hon_interviewee_2","name":"Mario Antonio Reyes Hernandez","image":"https://res.cloudinary.com/humansofnosara/image/upload/fl_progressive,c_scale,w_720/v1503813551/Mario%20Hernandez/Mario-Portrait_ysjoyq.jpg","location":{"name":"Nosara","geo":null},"phone":null,"email":null},{"uid":"hon_interviewee_3","name":"Fritz Elmendorf","image":"https://res.cloudinary.com/humansofnosara/image/upload/fl_progressive,c_scale,w_720/v1503171710/Fritz%20Elmendorf/Fritz-Portait_wsluvw.jpg","location":{"name":"Nosara","geo":null},"phone":null,"email":null},{"uid":"hon_interviewee_4","name":"Paola Pao Barrera","image":"https://res.cloudinary.com/humansofnosara/image/upload/fl_progressive,c_scale,w_720/v1502926141/Paola%20Barrera/Pao-Portrait_ix3ikx.jpg","location":{"name":"Nosara","geo":null},"phone":null,"email":null},{"uid":"hon_interviewee_5","name":"Gustavo Miranda Cambronero","image":"https://res.cloudinary.com/humansofnosara/image/upload/fl_progressive,c_scale,w_720/v1501437453/Gustavo%20Cambronero/Tao-Portrait_r8nj39.jpg","location":{"name":"Nosara","geo":null},"phone":null,"email":null}],"type":"person","name":["People","Person"]} \ No newline at end of file diff --git a/themes/humans-of-nosara/static/data/remax_property.json b/themes/humans-of-nosara/static/data/remax_property.json new file mode 100644 index 0000000..910a5a1 --- /dev/null +++ b/themes/humans-of-nosara/static/data/remax_property.json @@ -0,0 +1,4905 @@ +{ + "data": [{ + "uid": "remax_property_0", + "name": "ROCK STAR POINT CONDO DEVELOPMENT", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/193_DSCF1408r.JPG?itok=SZc5OZfR"], + "price": 0, + "url": "https://www.remax-tresamigos-cr.com/property/rock-star-point-condo-development" + }, { + "uid": "remax_property_1", + "name": "Los Altos Cacique - Lots 52, 53 & 54 Being Sold Separately", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/SAM_1654_0.JPG?itok=l8UmCJT2"], + "price": 0, + "url": "https://www.remax-tresamigos-cr.com/property/los-altos-cacique-lots-52-53-54-being-sold-separately" + }, { + "uid": "remax_property_2", + "name": "Artola Estates Lot 52", + "location": { + "name": null, + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images.jpg?itok=Me5RSmGN"], + "price": 24500, + "url": "https://www.remax-tresamigos-cr.com/property/artola-estates-lot-52" + }, { + "uid": "remax_property_3", + "name": "Finca Vainilla #11", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/187_2008-09-10_016-1.JPG?itok=7vyZVls3"], + "price": 25000, + "url": "https://www.remax-tresamigos-cr.com/property/finca-vainilla-11" + }, { + "uid": "remax_property_4", + "name": "Vista Ridge Lot 2B", + "location": { + "name": null, + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/17_Vista%20Ridge%20Golf%20%26%20CC%20Lot%2029%20small%20006-001.JPG?itok=-MdUu10u"], + "price": 27000, + "url": "https://www.remax-tresamigos-cr.com/property/vista-ridge-lot-2b" + }, { + "uid": "remax_property_5", + "name": "Nacazcol Lot 25A", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Nacazcol-Mediterraneo-2.jpg?itok=Me7v6lPF"], + "price": 27000, + "url": "https://www.remax-tresamigos-cr.com/property/nacazcol-lot-25a" + }, { + "uid": "remax_property_6", + "name": "Libertad Lot Blackmoon", + "location": { + "name": null, + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Libertad%20Lot%20Blackmoon%20s%20001.jpg?itok=n56k_RTd"], + "price": 27825, + "url": "https://www.remax-tresamigos-cr.com/property/libertad-lot-blackmoon" + }, { + "uid": "remax_property_7", + "name": "Artola Estates Lot 94", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Artola%2094-10.jpg?itok=51539q1z"], + "price": 28500, + "url": "https://www.remax-tresamigos-cr.com/property/artola-estates-lot-94" + }, { + "uid": "remax_property_8", + "name": "Artola Estates Lot 82", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Artola%2082%20YT.jpg?itok=zYwx1nLz"], + "price": 29000, + "url": "https://www.remax-tresamigos-cr.com/property/artola-estates-lot-82" + }, { + "uid": "remax_property_9", + "name": "Lomas Del Mar Lot 235", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Lomas%20235-10.jpg?itok=s-S6iWoO"], + "price": 29500, + "url": "https://www.remax-tresamigos-cr.com/property/lomas-del-mar-lot-235" + }, { + "uid": "remax_property_10", + "name": "Lot #30 in Artola Estates", + "location": { + "name": null, + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/136_Artola%20master%20plan%20lot%20%2330.JPG?itok=vq2w0123"], + "price": 29900, + "url": "https://www.remax-tresamigos-cr.com/property/lot-30-artola-estates" + }, { + "uid": "remax_property_11", + "name": "VRGCC #34", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/69_618618727303_0_BG.JPG?itok=w0baqqrZ"], + "price": 29900, + "url": "https://www.remax-tresamigos-cr.com/property/vrgcc-34" + }, { + "uid": "remax_property_12", + "name": "232 Lomas del Mar", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Lomas%20232-1.jpg?itok=Orzf-RSO"], + "price": 32000, + "url": "https://www.remax-tresamigos-cr.com/property/232-lomas-del-mar" + }, { + "uid": "remax_property_13", + "name": "Artola Estates Lot 95", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Artola%2095-14.jpg?itok=3VAE8VQw"], + "price": 33000, + "url": "https://www.remax-tresamigos-cr.com/property/artola-estates-lot-95" + }, { + "uid": "remax_property_14", + "name": "Lomas Del Mar Lot 253", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/221_53b%20Lomas%203.JPG?itok=iGCsXSbt"], + "price": 34000, + "url": "https://www.remax-tresamigos-cr.com/property/lomas-del-mar-lot-253" + }, { + "uid": "remax_property_15", + "name": "Little Dreams #40", + "location": { + "name": "Playa Ocotal", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/DSC_0014.JPG?itok=Nsy6p-di"], + "price": 34500, + "url": "https://www.remax-tresamigos-cr.com/property/little-dreams-40" + }, { + "uid": "remax_property_16", + "name": "Lomas Del Mar Lot 240", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/1_20.jpg?itok=JmKw7_Lv"], + "price": 35000, + "url": "https://www.remax-tresamigos-cr.com/property/lomas-del-mar-lot-240" + }, { + "uid": "remax_property_17", + "name": "Vista Estates Entrance- Lot # 2", + "location": { + "name": "Playa Panama", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/61_2.JPG?itok=AvxeBhei"], + "price": 35000, + "url": "https://www.remax-tresamigos-cr.com/property/vista-estates-entrance-lot-2" + }, { + "uid": "remax_property_18", + "name": "Lomas del Mar Lot 261, Playa Matapalo", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Day%20of%20Lots-75.jpg?itok=kMBkdbqw"], + "price": 35200, + "url": "https://www.remax-tresamigos-cr.com/property/lomas-del-mar-lot-261-playa-matapalo" + }, { + "uid": "remax_property_19", + "name": "Lomas Del Mar Lot 255", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/31_1.JPG?itok=-JRPctBw"], + "price": 37400, + "url": "https://www.remax-tresamigos-cr.com/property/lomas-del-mar-lot-255" + }, { + "uid": "remax_property_20", + "name": "LOMAS DEL MAR 256", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Day%20of%20Lots-69.jpg?itok=kIGbyH8T"], + "price": 38000, + "url": "https://www.remax-tresamigos-cr.com/property/lomas-del-mar-256" + }, { + "uid": "remax_property_21", + "name": "Cocomarindo Commerical Spaces #8, #9 & #10", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/IMG_8900.JPG?itok=eCaYKtHG"], + "price": 40000, + "url": "https://www.remax-tresamigos-cr.com/property/cocomarindo-commerical-spaces-8-9-10" + }, { + "uid": "remax_property_22", + "name": "Vista Ridge Golf & CC Lot 50", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/pgcc50%20resize%20001.jpg?itok=uuGfAIN2"], + "price": 40000, + "url": "https://www.remax-tresamigos-cr.com/property/vista-ridge-golf-cc-lot-50" + }, { + "uid": "remax_property_23", + "name": "Lomas Del Mar Lot 156", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/29_1.JPG?itok=RFPCX1-G"], + "price": 45000, + "url": "https://www.remax-tresamigos-cr.com/property/lomas-del-mar-lot-156" + }, { + "uid": "remax_property_24", + "name": "Lomas Del Mar PG 4A residential Lot", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/254_1.JPG?itok=houS1WN2"], + "price": 45000, + "url": "https://www.remax-tresamigos-cr.com/property/lomas-del-mar-pg-4a-residential-lot" + }, { + "uid": "remax_property_25", + "name": "Playa Ocotal Lot 10-A", + "location": { + "name": "Playa Ocotal", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/DSCN4545.JPG?itok=S82_jaCz"], + "price": 45000, + "url": "https://www.remax-tresamigos-cr.com/property/playa-ocotal-lot-10" + }, { + "uid": "remax_property_26", + "name": "Los Altos Del Cacique Lot 77", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/1918_90_IMG_9419.JPG?itok=OvdDGiqb"], + "price": 47000, + "url": "https://www.remax-tresamigos-cr.com/property/los-altos-del-cacique-lot-77" + }, { + "uid": "remax_property_27", + "name": "Roque Lot Playa Hermosa", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/247_FullSizeRender%20%281%29.JPG?itok=BI9BsEGc"], + "price": 48000, + "url": "https://www.remax-tresamigos-cr.com/property/roque-lot-playa-hermosa" + }, { + "uid": "remax_property_28", + "name": "Lomas del Mar Lot 258, Playa Matapalo", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Day%20of%20Lots-58.jpg?itok=SclNhtOI"], + "price": 48800, + "url": "https://www.remax-tresamigos-cr.com/property/lomas-del-mar-lot-258-playa-matapalo" + }, { + "uid": "remax_property_29", + "name": "Cacique Lot 45", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Los%20Altos%20del%20Cacique%20Lot%2045%20s%20001.jpg?itok=UNPEDL11"], + "price": 49000, + "url": "https://www.remax-tresamigos-cr.com/property/cacique-lot-45" + }, { + "uid": "remax_property_30", + "name": "Lomas Lot 105", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Lomas%20105-10.jpg?itok=Ne_vvz6y"], + "price": 49000, + "url": "https://www.remax-tresamigos-cr.com/property/lomas-lot-105" + }, { + "uid": "remax_property_31", + "name": "Communidad Back Lot", + "location": { + "name": null, + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/1945_75_Communidad%20Lot%204-min.JPG?itok=W2HxnaTS"], + "price": 49000, + "url": "https://www.remax-tresamigos-cr.com/property/communidad-back-lot" + }, { + "uid": "remax_property_32", + "name": "Ready to Build Estate Lot 42", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/IMGP2366.JPG?itok=v_R24U9O"], + "price": 50000, + "url": "https://www.remax-tresamigos-cr.com/property/ready-build-estate-lot-42" + }, { + "uid": "remax_property_33", + "name": "Papagayo Golf Course - Country Estate Lots", + "location": { + "name": null, + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/192_430918727303_0_BG.JPG?itok=pcrrVcep"], + "price": 50000, + "url": "https://www.remax-tresamigos-cr.com/property/papagayo-golf-course-country-estate-lots" + }, { + "uid": "remax_property_34", + "name": "Finca Vainilla 1- 2 acre Residental Lots", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/126_normand%20015%20web.JPG?itok=81V5zsnL"], + "price": 51000, + "url": "https://www.remax-tresamigos-cr.com/property/finca-vainilla-1-2-acre-residental-lots" + }, { + "uid": "remax_property_35", + "name": "Lot #161 Lomas del Mar", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/36_3.JPG?itok=d933HSOX"], + "price": 54400, + "url": "https://www.remax-tresamigos-cr.com/property/lot-161-lomas-del-mar" + }, { + "uid": "remax_property_36", + "name": "Encino Lot #331", + "location": { + "name": null, + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/36_VID09239.JPG?itok=YY7wrRJ4"], + "price": 55000, + "url": "https://www.remax-tresamigos-cr.com/property/encino-lot-331" + }, { + "uid": "remax_property_37", + "name": "Los Altos del Cacique Lots 4 & 5", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/233_2014-09-12%2009.JPG?itok=99yhv5M4"], + "price": 55000, + "url": "https://www.remax-tresamigos-cr.com/property/los-altos-del-cacique-lots-4-5" + }, { + "uid": "remax_property_38", + "name": "Gaviota del Sol Lot 8 and lot 9", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Gaviota%20Lot-100-min.jpg?itok=Zu8MIl79"], + "price": 55000, + "url": "https://www.remax-tresamigos-cr.com/property/gaviota-del-sol-lot-8-and-lot-9" + }, { + "uid": "remax_property_39", + "name": "Lomas Del Mar Lot 262", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/1_21.jpg?itok=QZVZ5g_A"], + "price": 55000, + "url": "https://www.remax-tresamigos-cr.com/property/lomas-del-mar-lot-262" + }, { + "uid": "remax_property_40", + "name": "Coco Bay Estates 32", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/DJI_0019.jpg?itok=pFtIbjWg"], + "price": 55000, + "url": "https://www.remax-tresamigos-cr.com/property/coco-bay-estates-32" + }, { + "uid": "remax_property_41", + "name": "Lomas del Mar Lot 260, Playa Matapalo", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Day%20of%20Lots-61.jpg?itok=R0JGQNFV"], + "price": 55200, + "url": "https://www.remax-tresamigos-cr.com/property/lomas-del-mar-lot-260-playa-matapalo" + }, { + "uid": "remax_property_42", + "name": "Mediterraneo 27C", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/3%2Bw06MWLSZuZ3gd0e2L42w.jpg?itok=tqU0Fmga"], + "price": 55500, + "url": "https://www.remax-tresamigos-cr.com/property/mediterraneo-27c" + }, { + "uid": "remax_property_43", + "name": "Lomas Del Mar Residential and Development Lots", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/227_CR-SS-SHORE7.JPG?itok=H6WClndu"], + "price": 59000, + "url": "https://www.remax-tresamigos-cr.com/property/lomas-del-mar-residential-and-development-lots" + }, { + "uid": "remax_property_44", + "name": "Coco Bay Estates Lot 20", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Coco%20Bay%20Estates%20Lot%2020%20001.jpg?itok=BEGvvGSV"], + "price": 59000, + "url": "https://www.remax-tresamigos-cr.com/property/coco-bay-estates-lot-20" + }, { + "uid": "remax_property_0", + "name": "Coco Bay Estates Lot 38", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Coco%20Bay%20Estates%20Lot%2038%20Social.jpg?itok=GQZ74urH"], + "price": 59000, + "url": "https://www.remax-tresamigos-cr.com/property/coco-bay-estates-lot-38" + }, { + "uid": "remax_property_1", + "name": "Lomas Del Mar Lot 141", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/1_19.jpg?itok=GW8wA3dn"], + "price": 59000, + "url": "https://www.remax-tresamigos-cr.com/property/lomas-del-mar-lot-141" + }, { + "uid": "remax_property_2", + "name": "Lomas Del Mar Lot 229", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/1_22.jpg?itok=OKhyOJ5_"], + "price": 59000, + "url": "https://www.remax-tresamigos-cr.com/property/lomas-del-mar-lot-229" + }, { + "uid": "remax_property_3", + "name": "Lomas Del Mar Lot 106", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/1_23.jpg?itok=Td9ac05u"], + "price": 59000, + "url": "https://www.remax-tresamigos-cr.com/property/lomas-del-mar-lot-106" + }, { + "uid": "remax_property_4", + "name": "Lomas del Mar Lot 154", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/1_14.jpg?itok=CQL8P7tP"], + "price": 60000, + "url": "https://www.remax-tresamigos-cr.com/property/lomas-del-mar-lot-154" + }, { + "uid": "remax_property_5", + "name": "Veintimiglia 4", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/20181030_162425_resized.jpg?itok=h4L9SXD1"], + "price": 62000, + "url": "https://www.remax-tresamigos-cr.com/property/veintimiglia-4" + }, { + "uid": "remax_property_6", + "name": "Finca Vainilla Lot #17", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/133_2008-09-10_011-1.JPG?itok=UnGcF9hT"], + "price": 65000, + "url": "https://www.remax-tresamigos-cr.com/property/finca-vainilla-lot-17" + }, { + "uid": "remax_property_7", + "name": "Cacique Lot 39", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Cacique%20Lot%2039%20s%20001.jpg?itok=bl89U_1l"], + "price": 65000, + "url": "https://www.remax-tresamigos-cr.com/property/cacique-lot-39" + }, { + "uid": "remax_property_8", + "name": "Finca Vainilla Lot #19", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/39_2008-09-10_011-1.JPG?itok=ciaI9f-H"], + "price": 65000, + "url": "https://www.remax-tresamigos-cr.com/property/finca-vainilla-lot-19" + }, { + "uid": "remax_property_9", + "name": "Finca Vainilla Lot #20", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/2008-09-10_002.jpg?itok=qbrLWxK7"], + "price": 65000, + "url": "https://www.remax-tresamigos-cr.com/property/finca-vainilla-lot-20" + }, { + "uid": "remax_property_10", + "name": "Altos Del Cacique 59", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/186_IMG_0741.JPG?itok=zvzJubnp"], + "price": 65000, + "url": "https://www.remax-tresamigos-cr.com/property/altos-del-cacique-59" + }, { + "uid": "remax_property_11", + "name": "Los Altos del Cacique Lots 52, 53 and 54", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/SAM_1654.JPG?itok=ohEBjHRp"], + "price": 65000, + "url": "https://www.remax-tresamigos-cr.com/property/los-altos-del-cacique-lots-52-53-and-54" + }, { + "uid": "remax_property_12", + "name": "Los Altos Del Cacique - Lots 52, 53 & 54 Being Sold...", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/SAM_1654_0.JPG?itok=l8UmCJT2"], + "price": 65000, + "url": "https://www.remax-tresamigos-cr.com/property/los-altos-del-cacique-lots-52-53-54-being-sold-separately-or-together" + }, { + "uid": "remax_property_13", + "name": "Lot for Sale in Playas Del Coco - 593.95 M2 / 6,393 SF", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/2018-07-02%2008.42.02.jpg?itok=j3xoF8_0"], + "price": 65000, + "url": "https://www.remax-tresamigos-cr.com/property/lot-sale-playas-del-coco-59395-m2-6393-sf" + }, { + "uid": "remax_property_14", + "name": "Mediterraneo Lot 26c", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/DJI_0132-2.jpg?itok=mzs6zHMe"], + "price": 65500, + "url": "https://www.remax-tresamigos-cr.com/property/mediterraneo-lot-26c" + }, { + "uid": "remax_property_15", + "name": "Agua de Lechuga A103", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/SAM_1204.JPG?itok=cM2Gxq8I"], + "price": 69500, + "url": "https://www.remax-tresamigos-cr.com/property/agua-de-lechuga-a103" + }, { + "uid": "remax_property_16", + "name": "Lomas Del Mar Lot 149", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/1_25.jpg?itok=k0uJg7ZX"], + "price": 69900, + "url": "https://www.remax-tresamigos-cr.com/property/lomas-del-mar-lot-149" + }, { + "uid": "remax_property_17", + "name": "Quesada Family Lot", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/253_IMG_0710.JPG?itok=kHguTEYj"], + "price": 70000, + "url": "https://www.remax-tresamigos-cr.com/property/quesada-family-lot" + }, { + "uid": "remax_property_18", + "name": "Altos Del Cacique Lot 80", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/176_IMG_0165.JPG?itok=THfYKwEk"], + "price": 70000, + "url": "https://www.remax-tresamigos-cr.com/property/altos-del-cacique-lot-80" + }, { + "uid": "remax_property_19", + "name": "Lomas Del Mar lot 138", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/1_26.jpg?itok=y3LTw9gT"], + "price": 72000, + "url": "https://www.remax-tresamigos-cr.com/property/lomas-del-mar-lot-138" + }, { + "uid": "remax_property_20", + "name": "Flamenco Rosa B-17", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/IMG-7162.JPG?itok=fgFpv0vv"], + "price": 72000, + "url": "https://www.remax-tresamigos-cr.com/property/flamenco-rosa-b-17" + }, { + "uid": "remax_property_21", + "name": "Lomas Del Mar, Lot 111 UNDER CONTRACT", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/114_1.JPG?itok=t75RLokJ"], + "price": 74950, + "url": "https://www.remax-tresamigos-cr.com/property/lomas-del-mar-lot-111-under-contract" + }, { + "uid": "remax_property_22", + "name": "Marina Loft Store Fronts #4 & #5 - Purchase both or only one", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/SAM_1312.JPG?itok=hXIcgxDP"], + "price": 75000, + "url": "https://www.remax-tresamigos-cr.com/property/marina-loft-store-fronts-4-5-purchase-both-or-only-one" + }, { + "uid": "remax_property_23", + "name": "Casa Carlita", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/IMG_0370%20%28FILEminimizer%29.JPG?itok=ugAXZy6u"], + "price": 75000, + "url": "https://www.remax-tresamigos-cr.com/property/casa-carlita" + }, { + "uid": "remax_property_24", + "name": "Vista Estates Lot 15", + "location": { + "name": "Playa Panama", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/001.JPG?itok=CRYA6eCT"], + "price": 75000, + "url": "https://www.remax-tresamigos-cr.com/property/vista-estates-lot-15" + }, { + "uid": "remax_property_25", + "name": "Le Coq Restaurant", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/1_16.jpg?itok=MDqIPG2d"], + "price": 75000, + "url": "https://www.remax-tresamigos-cr.com/property/le-coq-restaurant" + }, { + "uid": "remax_property_26", + "name": "Vistas Del Pacifico Lot B-22 Ocean Views See Video JUST...", + "location": { + "name": "Playa Panama", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/default_images/noimage.gif?itok=ylryoEGs"], + "price": 75500, + "url": "https://www.remax-tresamigos-cr.com/property/vistas-del-pacifico-lot-b-22-ocean-views-see-video-just-reduced" + }, { + "uid": "remax_property_27", + "name": "Finca Vainilla Lot #21", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/34_2008-09-10_011-1.JPG?itok=_G7dVkOz"], + "price": 77750, + "url": "https://www.remax-tresamigos-cr.com/property/finca-vainilla-lot-21" + }, { + "uid": "remax_property_28", + "name": "Lomas Del Mar Lot 164", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/1_24.jpg?itok=wPYO86D5"], + "price": 78000, + "url": "https://www.remax-tresamigos-cr.com/property/lomas-del-mar-lot-164" + }, { + "uid": "remax_property_29", + "name": "Pacifico Lot 93", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20Lot%2093-1.jpg?itok=a0wx7hu6"], + "price": 79000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-lot-93" + }, { + "uid": "remax_property_30", + "name": "Monte Paraiso Lot 4", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/IMG_9274.JPG?itok=8h0WtstS"], + "price": 79000, + "url": "https://www.remax-tresamigos-cr.com/property/monte-paraiso-lot-4" + }, { + "uid": "remax_property_31", + "name": "Pacifico Lot 136", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/PACIFICO%20136%20-%20ELEVATIONS.jpg?itok=UhB6ds7p"], + "price": 79000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-lot-136" + }, { + "uid": "remax_property_32", + "name": "Lomas Del Mar Ocean View Lot 208", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/209_Lomas%20Lots%20011.JPG?itok=1hcMGuM8"], + "price": 80000, + "url": "https://www.remax-tresamigos-cr.com/property/lomas-del-mar-ocean-view-lot-208" + }, { + "uid": "remax_property_33", + "name": "PGCC Lot 10 on 3rd Green", + "location": { + "name": "Papagayo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/103_618618727303_0_BG.JPG?itok=OKepA-ga"], + "price": 85000, + "url": "https://www.remax-tresamigos-cr.com/property/pgcc-lot-10-3rd-green" + }, { + "uid": "remax_property_34", + "name": "Monte Bello Norte 4", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/MBN4-5-6_0.jpg?itok=J6dB2Xl2"], + "price": 85000, + "url": "https://www.remax-tresamigos-cr.com/property/monte-bello-norte-4" + }, { + "uid": "remax_property_35", + "name": "Monte Bello Norte 5", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/MBN4-5-7.jpg?itok=KeZ6aAF2"], + "price": 85000, + "url": "https://www.remax-tresamigos-cr.com/property/monte-bello-norte-5" + }, { + "uid": "remax_property_36", + "name": "Lomas Del Mar lots 245 & 246", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/1_27.jpg?itok=K4Z0q9Pr"], + "price": 89000, + "url": "https://www.remax-tresamigos-cr.com/property/lomas-del-mar-lots-245-246" + }, { + "uid": "remax_property_37", + "name": "Ladera del Mar Ranchitos Ridge Lot 22", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/LDM%20RR%20Lot%2022%20001.jpg?itok=qLCl71y5"], + "price": 89000, + "url": "https://www.remax-tresamigos-cr.com/property/ladera-del-mar-ranchitos-ridge-lot-22" + }, { + "uid": "remax_property_38", + "name": "Monte Paraiso Lot 2 JUST REDUCED. See video", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/249_Monte%20Paraiso%20lot%2017.JPG?itok=-yc-HlDG"], + "price": 89000, + "url": "https://www.remax-tresamigos-cr.com/property/monte-paraiso-lot-2-just-reduced-see-video" + }, { + "uid": "remax_property_39", + "name": "Lomas del Mar Lot 230", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/1_28.jpg?itok=TUsboJC4"], + "price": 90000, + "url": "https://www.remax-tresamigos-cr.com/property/lomas-del-mar-lot-230" + }, { + "uid": "remax_property_40", + "name": "Isabella Lot 20", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/IMG_2957.JPG?itok=zhZ3I0jU"], + "price": 90000, + "url": "https://www.remax-tresamigos-cr.com/property/isabella-lot-20" + }, { + "uid": "remax_property_41", + "name": "Villa la Colina 8033", + "location": { + "name": "Playa Ocotal", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/VLC%208033%20YT_1.jpg?itok=CIMUMxeF"], + "price": 95000, + "url": "https://www.remax-tresamigos-cr.com/property/villa-la-colina-8033" + }, { + "uid": "remax_property_42", + "name": "VLC Dolce Vita 8036", + "location": { + "name": "Playa Ocotal", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/VLC8036-11.jpg?itok=-loPibKd"], + "price": 95000, + "url": "https://www.remax-tresamigos-cr.com/property/vlc-dolce-vita-8036" + }, { + "uid": "remax_property_43", + "name": "VLC Dolce Vida 8035", + "location": { + "name": "Playa Ocotal", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/VLC%208035%20YT%20%281%29.jpg?itok=0peC0l_e"], + "price": 95000, + "url": "https://www.remax-tresamigos-cr.com/property/vlc-dolce-vida-8035" + }, { + "uid": "remax_property_44", + "name": "Serena Suites G01", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Serena%20Suites%20G%2001%20001.jpg?itok=TWGZTcsd"], + "price": 99000, + "url": "https://www.remax-tresamigos-cr.com/property/serena-suites-g01" + }, { + "uid": "remax_property_0", + "name": "Ladera Del Mar Ranchitos 2", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Ladera%20Entrance%203%20%282%29.jpg?itok=VeIKhxqz"], + "price": 99000, + "url": "https://www.remax-tresamigos-cr.com/property/ladera-del-mar-ranchitos-2" + }, { + "uid": "remax_property_1", + "name": "Sierra Suerte Lucky Mountain", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/188_DSCI0195%20%28Medium%29.JPG?itok=IvXDAxG7"], + "price": 99000, + "url": "https://www.remax-tresamigos-cr.com/property/sierra-suerte-lucky-mountain" + }, { + "uid": "remax_property_2", + "name": "Monte Bello North 9 Ocean View Lot Playa Hermosa See Video", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/1_New%20Panoramic%20Web.JPG?itok=y_PC_vKZ"], + "price": 99000, + "url": "https://www.remax-tresamigos-cr.com/property/monte-bello-north-9-ocean-view-lot-playa-hermosa-see-video" + }, { + "uid": "remax_property_3", + "name": "Lomas del Mar Lot 212", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/1-min.jpg?itok=r5uNbDA0"], + "price": 99000, + "url": "https://www.remax-tresamigos-cr.com/property/lomas-del-mar-lot-212" + }, { + "uid": "remax_property_4", + "name": "Coco Bay Estates Lot 66 Ocean Views", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Coco%20Bay%20Estates%20Lot%2066-1.jpg?itok=WlXrS8Op"], + "price": 99000, + "url": "https://www.remax-tresamigos-cr.com/property/coco-bay-estates-lot-66-ocean-views" + }, { + "uid": "remax_property_5", + "name": "Ocotal Lot 2-B", + "location": { + "name": "Playa Ocotal", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/1815_53_DSCN4496.JPG?itok=wdIrrr6k"], + "price": 99000, + "url": "https://www.remax-tresamigos-cr.com/property/ocotal-lot-2-b" + }, { + "uid": "remax_property_6", + "name": "Ranchitos Rigde 23, Ladera del Mar", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/2_7.jpg?itok=SZvQKiIg"], + "price": 99500, + "url": "https://www.remax-tresamigos-cr.com/property/ranchitos-rigde-23-ladera-del-mar" + }, { + "uid": "remax_property_7", + "name": "Vistas del Pacifico Lot 3", + "location": { + "name": "Playa Panama", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/VDP%20Lot%203%20resize%201.jpg?itok=rG3c_d8V"], + "price": 100000, + "url": "https://www.remax-tresamigos-cr.com/property/vistas-del-pacifico-lot-3" + }, { + "uid": "remax_property_8", + "name": "Coco Bay Estates Ocean View Lot 27", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/IMG_0242a.jpg?itok=Wx4u-ePB"], + "price": 100000, + "url": "https://www.remax-tresamigos-cr.com/property/coco-bay-estates-ocean-view-lot-27" + }, { + "uid": "remax_property_9", + "name": "Pacifico Lot 47", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20Beach%20Club-1_1.jpg?itok=Rzh-Ldzw"], + "price": 105000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-lot-47" + }, { + "uid": "remax_property_10", + "name": "Sea Bird #10", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/01_2.jpg?itok=exxVcN_N"], + "price": 110000, + "url": "https://www.remax-tresamigos-cr.com/property/sea-bird-10" + }, { + "uid": "remax_property_11", + "name": "Palo Alto 27B", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/01PaloAltoEntry.jpg?itok=x2zvX_71"], + "price": 110000, + "url": "https://www.remax-tresamigos-cr.com/property/palo-alto-27b" + }, { + "uid": "remax_property_12", + "name": "Casa Tortuga", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/SAM_0839%20%28FILEminimizer%29.JPG?itok=R_siKuVe"], + "price": 110000, + "url": "https://www.remax-tresamigos-cr.com/property/casa-tortuga" + }, { + "uid": "remax_property_13", + "name": "Coco Bay Estates Lot 51", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/DSC01413.JPG?itok=cl-M4F4c"], + "price": 110000, + "url": "https://www.remax-tresamigos-cr.com/property/coco-bay-estates-lot-51" + }, { + "uid": "remax_property_14", + "name": "Palo Lot Lot 27A", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/150_PaloAltoLot27-11.JPG?itok=uDouOUnl"], + "price": 115000, + "url": "https://www.remax-tresamigos-cr.com/property/palo-lot-lot-27a" + }, { + "uid": "remax_property_15", + "name": "Lomas Del Mar, Lot 215 Ocean Views", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Lot%202152.jpg?itok=8G8PoiYq"], + "price": 115000, + "url": "https://www.remax-tresamigos-cr.com/property/lomas-del-mar-lot-215-ocean-views" + }, { + "uid": "remax_property_16", + "name": "Lomas Del Mar Lot 209", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/IMG_1122.jpg?itok=i81OLBSw"], + "price": 115000, + "url": "https://www.remax-tresamigos-cr.com/property/lomas-del-mar-lot-209" + }, { + "uid": "remax_property_17", + "name": "Coco Bay Estates Ocean View Lot 21", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Coco%20Bay%20Estates%20Lot%2021%20s%20001.jpg?itok=G2KwK2nG"], + "price": 115000, + "url": "https://www.remax-tresamigos-cr.com/property/coco-bay-estates-ocean-view-lot-21" + }, { + "uid": "remax_property_18", + "name": "Lomas Del Mar Ocean View Lot 202", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/DSC_7427.jpg?itok=9bJaqvS6"], + "price": 116000, + "url": "https://www.remax-tresamigos-cr.com/property/lomas-del-mar-ocean-view-lot-202" + }, { + "uid": "remax_property_19", + "name": "Villa Riviera B-6", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/DSCN4959_0.JPG?itok=LtJP1vQ1"], + "price": 118000, + "url": "https://www.remax-tresamigos-cr.com/property/villa-riviera-b-6" + }, { + "uid": "remax_property_20", + "name": "Libertad Lot", + "location": { + "name": null, + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/1789_252_06.JPG?itok=g5EhDJxA"], + "price": 120000, + "url": "https://www.remax-tresamigos-cr.com/property/libertad-lot" + }, { + "uid": "remax_property_21", + "name": "Flor de Limon", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Flor%20de%20Limon-2.jpg?itok=JfW7veDz"], + "price": 120000, + "url": "https://www.remax-tresamigos-cr.com/property/flor-de-limon" + }, { + "uid": "remax_property_22", + "name": "Monte Paraiso Ocean View lot 16", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/12_Views%20from%202nd%20level%20home.JPG?itok=WTHeI9w2"], + "price": 125000, + "url": "https://www.remax-tresamigos-cr.com/property/monte-paraiso-ocean-view-lot-16" + }, { + "uid": "remax_property_23", + "name": "Cacique Lot 74", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/241_Entrance.JPG?itok=xo68uE3i"], + "price": 125000, + "url": "https://www.remax-tresamigos-cr.com/property/cacique-lot-74" + }, { + "uid": "remax_property_24", + "name": "Playa Hermosa Lot Price Reduced", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/72_DSC0112022.JPG?itok=QUJZjPNS"], + "price": 125000, + "url": "https://www.remax-tresamigos-cr.com/property/playa-hermosa-lot-price-reduced-0" + }, { + "uid": "remax_property_25", + "name": "VDP F-5", + "location": { + "name": "Playa Panama", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/242_Vistas%20del%20Pacifico%20Lot%20F5%20resize%201.JPG?itok=CnhHV0ZJ"], + "price": 125000, + "url": "https://www.remax-tresamigos-cr.com/property/vdp-f-5" + }, { + "uid": "remax_property_26", + "name": "Palo Alto- Lot 44 Walk to the Beach", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Palo%20Alto%20Lot%2044-1.jpg?itok=KlnYonni"], + "price": 125000, + "url": "https://www.remax-tresamigos-cr.com/property/palo-alto-lot-44-walk-beach" + }, { + "uid": "remax_property_27", + "name": "LOMAS DEL MAR LOT 203", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Lomas%20203%20%281%29.jpg?itok=RRo7L5Ns"], + "price": 125000, + "url": "https://www.remax-tresamigos-cr.com/property/lomas-del-mar-lot-203" + }, { + "uid": "remax_property_28", + "name": "Altos Del Cacique 124", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/245_IMGP3394.JPG?itok=wDk6hbkB"], + "price": 125000, + "url": "https://www.remax-tresamigos-cr.com/property/altos-del-cacique-124" + }, { + "uid": "remax_property_29", + "name": "Serena Suites K3", + "location": { + "name": "Playa Ocotal", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Bedroom%202-1_2.jpg?itok=ECW3Bpq3"], + "price": 125000, + "url": "https://www.remax-tresamigos-cr.com/property/serena-suites-k3" + }, { + "uid": "remax_property_30", + "name": "Lomas Del Mar Lot 219 Ocean Views", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/2018-04-15_14-24-52.jpg?itok=65JGHU_5"], + "price": 126000, + "url": "https://www.remax-tresamigos-cr.com/property/lomas-del-mar-lot-219-ocean-views" + }, { + "uid": "remax_property_31", + "name": "Hermosa Montana Lot 11", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Hermosa%20Montana%20Lot%2011%20s%20001.jpg?itok=jqs0zgOJ"], + "price": 129000, + "url": "https://www.remax-tresamigos-cr.com/property/hermosa-montana-lot-11" + }, { + "uid": "remax_property_32", + "name": "Lomas Del Mar Lot 216", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/DSCN2791.JPG?itok=cM2EStEH"], + "price": 132000, + "url": "https://www.remax-tresamigos-cr.com/property/lomas-del-mar-lot-216" + }, { + "uid": "remax_property_33", + "name": "#6 Valle Dorado", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Valle%20Dorado%206%20YT.jpg?itok=Bluzqh4z"], + "price": 135000, + "url": "https://www.remax-tresamigos-cr.com/property/6-valle-dorado" + }, { + "uid": "remax_property_34", + "name": "Vistas Del Pacifico Lot B12", + "location": { + "name": "Playa Panama", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Vistas%20del%20Pacifico%20Lot%20B12%201%20%281%29.jpg?itok=iHgWaq68"], + "price": 135000, + "url": "https://www.remax-tresamigos-cr.com/property/vistas-del-pacifico-lot-b12" + }, { + "uid": "remax_property_35", + "name": "Flamenco Rosa B14", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Flamenco%20Rosa%20B14%20016.jpg?itok=Dc38k140"], + "price": 135000, + "url": "https://www.remax-tresamigos-cr.com/property/flamenco-rosa-b14" + }, { + "uid": "remax_property_36", + "name": "Vistas Del Pacifico Lot 26 JUST REDUCED", + "location": { + "name": "Playa Panama", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/206_IMG_1855%20%28Small%29.JPG?itok=10gxRDyI"], + "price": 135000, + "url": "https://www.remax-tresamigos-cr.com/property/vistas-del-pacifico-lot-26-just-reduced" + }, { + "uid": "remax_property_37", + "name": "Vistas Del Pacifico Lot 27 JUST REDUCED", + "location": { + "name": "Playa Panama", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/185_IMG_1855%20%28Small%29.JPG?itok=LK5fGFO2"], + "price": 135000, + "url": "https://www.remax-tresamigos-cr.com/property/vistas-del-pacifico-lot-27-just-reduced" + }, { + "uid": "remax_property_38", + "name": "Ladera del Mar, Monte Vista # 16", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/1_8.jpg?itok=Lv0iKPZe"], + "price": 137500, + "url": "https://www.remax-tresamigos-cr.com/property/ladera-del-mar-monte-vista-16" + }, { + "uid": "remax_property_39", + "name": "Monte Paraiso Lot 1 Ocean View", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/202_IMG_0591.JPG?itok=1rzhXokK"], + "price": 139000, + "url": "https://www.remax-tresamigos-cr.com/property/monte-paraiso-lot-1-ocean-view" + }, { + "uid": "remax_property_40", + "name": "Flamenco Rosa B16", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Flamenco%20Rosa%20B16%20012.jpg?itok=7SR-mmwI"], + "price": 139000, + "url": "https://www.remax-tresamigos-cr.com/property/flamenco-rosa-b16" + }, { + "uid": "remax_property_41", + "name": "Colonial Plaza Retail Office #7", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/250_DSCN5040.JPG?itok=--MwiTn-"], + "price": 140000, + "url": "https://www.remax-tresamigos-cr.com/property/colonial-plaza-retail-office-7" + }, { + "uid": "remax_property_42", + "name": "Plaza Colonial #8", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/72_IMG_0560.JPG?itok=QLxD-ZS1"], + "price": 140000, + "url": "https://www.remax-tresamigos-cr.com/property/plaza-colonial-8" + }, { + "uid": "remax_property_43", + "name": "Los Retoños C", + "location": { + "name": null, + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/DSCN7960.JPG?itok=27gKsv-H"], + "price": 143000, + "url": "https://www.remax-tresamigos-cr.com/property/los-reto%C3%B1os-c" + }, { + "uid": "remax_property_44", + "name": "Los Retoños C", + "location": { + "name": null, + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/DSCN7960.JPG?itok=27gKsv-H"], + "price": 143000, + "url": "https://www.remax-tresamigos-cr.com/property/los-reto%C3%B1os-c" + }, { + "uid": "remax_property_0", + "name": "Agua de Lechuga B204", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/ADL%20B204-10.jpg?itok=u2YF2wQo"], + "price": 144500, + "url": "https://www.remax-tresamigos-cr.com/property/agua-de-lechuga-b204" + }, { + "uid": "remax_property_1", + "name": "Lomas Del Mar Lot 217", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/DSCN2802.JPG?itok=D8RjBIkS"], + "price": 145000, + "url": "https://www.remax-tresamigos-cr.com/property/lomas-del-mar-lot-217" + }, { + "uid": "remax_property_2", + "name": "Agua De Lechuga - A202 Unique Condo", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/DSC06592.jpg?itok=PJUt-2Vj"], + "price": 145000, + "url": "https://www.remax-tresamigos-cr.com/property/agua-de-lechuga-a202-unique-condo" + }, { + "uid": "remax_property_3", + "name": "Ladera del Mar Lot #18", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/224_Lot%2018%20Sunset%20Panorama-reduced.JPG?itok=nI9NmzCS"], + "price": 145000, + "url": "https://www.remax-tresamigos-cr.com/property/ladera-del-mar-lot-18" + }, { + "uid": "remax_property_4", + "name": "Palo Alto Lot 14 Ocean Views", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Palo%20Alto%20Lot%2014%20s%20001.jpg?itok=v_tvQmS8"], + "price": 149000, + "url": "https://www.remax-tresamigos-cr.com/property/palo-alto-lot-14-ocean-views" + }, { + "uid": "remax_property_5", + "name": "Country Acreage La Libertad 10 acres", + "location": { + "name": null, + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/136_2015-10-30_13-08-13.JPG?itok=P9pqwJRK"], + "price": 149000, + "url": "https://www.remax-tresamigos-cr.com/property/country-acreage-la-libertad-10-acres" + }, { + "uid": "remax_property_6", + "name": "Los Altos Del Cacique Lot 74", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/67_SAM_0487%20web.JPG?itok=BkVOS_Zu"], + "price": 149000, + "url": "https://www.remax-tresamigos-cr.com/property/los-altos-del-cacique-lot-74" + }, { + "uid": "remax_property_7", + "name": "Chorotega Lots 2 min walk to Beach", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/29_DSC00881.JPG?itok=x7XCwFOW"], + "price": 149000, + "url": "https://www.remax-tresamigos-cr.com/property/chorotega-lots-2-min-walk-beach" + }, { + "uid": "remax_property_8", + "name": "Rock Lots in Vistas del Pacifico", + "location": { + "name": "Playa Panama", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/245_DSC00787.JPG?itok=23ufIXfT"], + "price": 149000, + "url": "https://www.remax-tresamigos-cr.com/property/rock-lots-vistas-del-pacifico" + }, { + "uid": "remax_property_9", + "name": "Cactus Heights - Ocean View Lots 4 & 5", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/1_12.jpg?itok=H8IhWiVL"], + "price": 150000, + "url": "https://www.remax-tresamigos-cr.com/property/cactus-heights-ocean-view-lots-4-5" + }, { + "uid": "remax_property_10", + "name": "Lomas Vistas Development Parcel - PG 2", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/1798_183_2.JPG?itok=XAny8RiD"], + "price": 150000, + "url": "https://www.remax-tresamigos-cr.com/property/lomas-vistas-development-parcel-pg-2" + }, { + "uid": "remax_property_11", + "name": "Clara Hermosa Lot 3", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Clara%20Hermosa-10.jpg?itok=1-meha26"], + "price": 154900, + "url": "https://www.remax-tresamigos-cr.com/property/clara-hermosa-lot-3" + }, { + "uid": "remax_property_12", + "name": "Ladera del Mar MV Estates Lot 29", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/LDM%20MV%20Lot%2029%20001.jpg?itok=ymNHtlH2"], + "price": 159000, + "url": "https://www.remax-tresamigos-cr.com/property/ladera-del-mar-mv-estates-lot-29" + }, { + "uid": "remax_property_13", + "name": "Lomas Del Mar Ocean View Lot 201", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/DSC_7423.jpg?itok=XyTTu5tJ"], + "price": 159000, + "url": "https://www.remax-tresamigos-cr.com/property/lomas-del-mar-ocean-view-lot-201" + }, { + "uid": "remax_property_14", + "name": "Ladera del Mar, Monte Vista #10", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/1_9.jpg?itok=xsFt6oVr"], + "price": 159500, + "url": "https://www.remax-tresamigos-cr.com/property/ladera-del-mar-monte-vista-10" + }, { + "uid": "remax_property_15", + "name": "Casa Botanica Ocotal", + "location": { + "name": "Playa Ocotal", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Ocotal%20Casa%20Botanica%20s%20001.jpg?itok=3VsJTGwe"], + "price": 159900, + "url": "https://www.remax-tresamigos-cr.com/property/casa-botanica-ocotal" + }, { + "uid": "remax_property_16", + "name": "Guacimo Fiorito 18", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Guacimo%20Fiorito%2018-2.jpg?itok=gdfBOtrs"], + "price": 160000, + "url": "https://www.remax-tresamigos-cr.com/property/guacimo-fiorito-18" + }, { + "uid": "remax_property_17", + "name": "Coco Joya 3", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Coco%20Joya%203%20small%20001.jpg?itok=7IKf5fCE"], + "price": 169000, + "url": "https://www.remax-tresamigos-cr.com/property/coco-joya-3" + }, { + "uid": "remax_property_18", + "name": "Pacifico C 107", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20C%20107%20s%20001.jpg?itok=tdn5bLe7"], + "price": 170000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-c-107" + }, { + "uid": "remax_property_19", + "name": "Pacifico L 515", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20L515%20small%20001.jpg?itok=IgdWHqf2"], + "price": 170000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-l-515" + }, { + "uid": "remax_property_20", + "name": "Villas Sol #15", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/SAM_1218.JPG?itok=c4DfsIjy"], + "price": 172000, + "url": "https://www.remax-tresamigos-cr.com/property/villas-sol-15" + }, { + "uid": "remax_property_21", + "name": "2 Bed, 2 bath Playas del Coco, Coco Joya #5", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/default_images/noimage.gif?itok=ylryoEGs"], + "price": 174000, + "url": "https://www.remax-tresamigos-cr.com/property/2-bed-2-bath-playas-del-coco-coco-joya-5" + }, { + "uid": "remax_property_22", + "name": "2 Bed, 2 bath Playas del Coco, Coco Joya #5", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/CJ5-1_0.jpg?itok=blNk_BSC"], + "price": 174000, + "url": "https://www.remax-tresamigos-cr.com/property/2-bed-2-bath-playas-del-coco-coco-joya-5-0" + }, { + "uid": "remax_property_23", + "name": "Playa Ocotal Lot 22", + "location": { + "name": "Playa Ocotal", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Ocotal%20Lot%2022%20YT.jpg?itok=LFLSR6DO"], + "price": 175000, + "url": "https://www.remax-tresamigos-cr.com/property/playa-ocotal-lot-22" + }, { + "uid": "remax_property_24", + "name": "UNDER CONTRACT Vistas del Pacifico Ocean View Lot 13B", + "location": { + "name": "Playa Panama", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/63_Four%20Seasons%20Ocean%20View.JPG?itok=bEOuMPCj"], + "price": 175000, + "url": "https://www.remax-tresamigos-cr.com/property/under-contract-vistas-del-pacifico-ocean-view-lot-13b" + }, { + "uid": "remax_property_25", + "name": "Pacifico Heights Lot 4", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20Heights%20Lot%204%20001.jpg?itok=Q5oXZUrM"], + "price": 175000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-heights-lot-4" + }, { + "uid": "remax_property_26", + "name": "Coco Sun Set Hills", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Coco%20Sunset%20Hills-11.jpg?itok=zueQSwGK"], + "price": 175000, + "url": "https://www.remax-tresamigos-cr.com/property/coco-sun-set-hills" + }, { + "uid": "remax_property_27", + "name": "Vistas del Pacifico Ocean View Lot", + "location": { + "name": "Playa Panama", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/166_DSC01369.JPG?itok=cve5mqdT"], + "price": 175000, + "url": "https://www.remax-tresamigos-cr.com/property/vistas-del-pacifico-ocean-view-lot" + }, { + "uid": "remax_property_28", + "name": "Pacifico L509", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20L509%20YT.jpg?itok=fergzLro"], + "price": 176000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-l509" + }, { + "uid": "remax_property_29", + "name": "Pacifico L516", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20L516%20YT.jpg?itok=cKGFWdJU"], + "price": 178000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-l516" + }, { + "uid": "remax_property_30", + "name": "Vista Ocotal 1A", + "location": { + "name": "Playa Ocotal", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/VistaOcotal1A-0.jpg?itok=w0tCFcne"], + "price": 179000, + "url": "https://www.remax-tresamigos-cr.com/property/vista-ocotal-1a" + }, { + "uid": "remax_property_31", + "name": "Lot 119 in Los Altos del Cacique", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Cacique%20Lot%20119-1.jpg?itok=tABC7HTP"], + "price": 179000, + "url": "https://www.remax-tresamigos-cr.com/property/lot-119-los-altos-del-cacique" + }, { + "uid": "remax_property_32", + "name": "Casa Corrales", + "location": { + "name": null, + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Casa%20Corrales-12.jpg?itok=hGZLJY_e"], + "price": 179000, + "url": "https://www.remax-tresamigos-cr.com/property/casa-corrales" + }, { + "uid": "remax_property_33", + "name": "Solarium WareHouse or Office Facility", + "location": { + "name": null, + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/220_SAM_4114.JPG?itok=URMOyure"], + "price": 179000, + "url": "https://www.remax-tresamigos-cr.com/property/solarium-warehouse-or-office-facility" + }, { + "uid": "remax_property_34", + "name": "5 Lots in Playa Hermosa", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Playa%20Hermosa%205%20Lots%201.jpg?itok=2-dC2pYk"], + "price": 180000, + "url": "https://www.remax-tresamigos-cr.com/property/5-lots-playa-hermosa" + }, { + "uid": "remax_property_35", + "name": "Pacifico L-216", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Beach%20Club%20216.jpg?itok=w0SbBsW4"], + "price": 184000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-l-216" + }, { + "uid": "remax_property_36", + "name": "Hermosa Heights Lot 50", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/HH%20Lot%2050-51.jpg?itok=l7X7MmD8"], + "price": 184885, + "url": "https://www.remax-tresamigos-cr.com/property/hermosa-heights-lot-50" + }, { + "uid": "remax_property_37", + "name": "Casa Estrella - 300 meters to the beach", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/house1.jpg?itok=wUuGuXWO"], + "price": 185000, + "url": "https://www.remax-tresamigos-cr.com/property/casa-estrella-300-meters-beach" + }, { + "uid": "remax_property_38", + "name": "Valle Escondido 6 & 7", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/100_0276.jpg?itok=f9e9fDKz"], + "price": 185000, + "url": "https://www.remax-tresamigos-cr.com/property/valle-escondido-6-7" + }, { + "uid": "remax_property_39", + "name": "Isabella Lot 11", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/IMG_2941.JPG?itok=aIuv0JNZ"], + "price": 185000, + "url": "https://www.remax-tresamigos-cr.com/property/isabella-lot-11" + }, { + "uid": "remax_property_40", + "name": "Coco Joya 6", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Coco%20Joya%206%20s%20001.jpg?itok=mIkyeYe6"], + "price": 185000, + "url": "https://www.remax-tresamigos-cr.com/property/coco-joya-6" + }, { + "uid": "remax_property_41", + "name": "Finca Tierra Salvaje", + "location": { + "name": null, + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/146_IMG_0488.JPG?itok=0MCpjDzu"], + "price": 187000, + "url": "https://www.remax-tresamigos-cr.com/property/finca-tierra-salvaje" + }, { + "uid": "remax_property_42", + "name": "Pacifico Life Style 813 Sold!!!", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20Beach%20Club-1_2.jpg?itok=0MtwOC8B"], + "price": 188500, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-life-style-813-sold" + }, { + "uid": "remax_property_43", + "name": "Pacifico L1213", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico-2_0.jpg?itok=YrAcVqFW"], + "price": 189900, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-l1213" + }, { + "uid": "remax_property_44", + "name": "Pacifico C 203", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20C203%20s%20001.jpg?itok=jm2QXGSA"], + "price": 190000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-c-203" + }, { + "uid": "remax_property_0", + "name": "346 El Oasis", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/El%20Oasis%20346%20YT.jpg?itok=fLi66Sbn"], + "price": 190000, + "url": "https://www.remax-tresamigos-cr.com/property/346-el-oasis" + }, { + "uid": "remax_property_1", + "name": "Pacifico L 608", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20L%20608%20001.jpg?itok=Z1UwPo4y"], + "price": 195000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-l-608" + }, { + "uid": "remax_property_2", + "name": "Pacifico Lot 105 - Stunning Ocean View Lot", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Lot%20105%20Main.JPG?itok=JGhWOaMP"], + "price": 195000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-lot-105-stunning-ocean-view-lot" + }, { + "uid": "remax_property_3", + "name": "Vista Estates View lot #29 BEST PRICED WATER VIEW LOT JUST...", + "location": { + "name": "Playa Panama", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/140_web%202.JPG?itok=H2_9LEr3"], + "price": 195000, + "url": "https://www.remax-tresamigos-cr.com/property/vista-estates-view-lot-29-best-priced-water-view-lot-just-reduced" + }, { + "uid": "remax_property_4", + "name": "#29 Villas Sol", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Villa%20Sol%2029%20YT.jpg?itok=82xR8Wm_"], + "price": 198000, + "url": "https://www.remax-tresamigos-cr.com/property/29-villas-sol" + }, { + "uid": "remax_property_5", + "name": "Pacifico L 209", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20L%20209%20s%20001.jpg?itok=NS_9_FCg"], + "price": 199000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-l-209" + }, { + "uid": "remax_property_6", + "name": "Mar Vista Ocean View Lot 20", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/17_1.JPG?itok=x9uLxeI7"], + "price": 199000, + "url": "https://www.remax-tresamigos-cr.com/property/mar-vista-ocean-view-lot-20" + }, { + "uid": "remax_property_7", + "name": "Finca Miramontes", + "location": { + "name": null, + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Distance%20Screen%20Shot%202.png?itok=1a0ZRriU"], + "price": 199000, + "url": "https://www.remax-tresamigos-cr.com/property/finca-miramontes" + }, { + "uid": "remax_property_8", + "name": "Pacifico Lot 108", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20Lot%20108%20s%20001.jpg?itok=JfkhxY0K"], + "price": 199000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-lot-108" + }, { + "uid": "remax_property_9", + "name": "Coco Bay Estates 52", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/234_IMG_1593.JPG?itok=DAL9UHgK"], + "price": 199000, + "url": "https://www.remax-tresamigos-cr.com/property/coco-bay-estates-52" + }, { + "uid": "remax_property_10", + "name": "Isabella Lot #9", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/IMG_4871.JPG?itok=WGkPsw1z"], + "price": 199900, + "url": "https://www.remax-tresamigos-cr.com/property/isabella-lot-9" + }, { + "uid": "remax_property_11", + "name": "Los Retoños B", + "location": { + "name": null, + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/DSCN7931.JPG?itok=oJ9JPDx7"], + "price": 200000, + "url": "https://www.remax-tresamigos-cr.com/property/los-reto%C3%B1os-b" + }, { + "uid": "remax_property_12", + "name": "Monte Bello Norte 3", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/81_Google%20Map%20close.JPG?itok=-SYzM5ag"], + "price": 200000, + "url": "https://www.remax-tresamigos-cr.com/property/monte-bello-norte-3" + }, { + "uid": "remax_property_13", + "name": "Playa Junquillal Beach Front Lot Laker", + "location": { + "name": null, + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Junquillal%20Beachfront%20resize%20001.jpg?itok=F58lO6f6"], + "price": 200000, + "url": "https://www.remax-tresamigos-cr.com/property/playa-junquillal-beach-front-lot-laker" + }, { + "uid": "remax_property_14", + "name": "Pacifico C403", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/C403%20YT.jpg?itok=tOi3goUV"], + "price": 204000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-c403" + }, { + "uid": "remax_property_15", + "name": "Sea Coco View", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Sea%20Coco%20View-103.jpg?itok=q03OMdw_"], + "price": 204000, + "url": "https://www.remax-tresamigos-cr.com/property/sea-coco-view" + }, { + "uid": "remax_property_16", + "name": "Pacifico C 206", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20C%20206%20s%20001.jpg?itok=2hmkyy5p"], + "price": 205000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-c-206" + }, { + "uid": "remax_property_17", + "name": "Coco Development lots", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Coco%20Lots-1.jpg?itok=rfpAi8nd"], + "price": 205800, + "url": "https://www.remax-tresamigos-cr.com/property/coco-development-lots" + }, { + "uid": "remax_property_18", + "name": "Pacifico C303", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/C303-1.jpg?itok=6SRfJbpK"], + "price": 209000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-c303" + }, { + "uid": "remax_property_19", + "name": "Serendipity Ocean View Lot 9 Lomas Del Mar", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Lot%209%20-%201.jpg?itok=kYAvzL9E"], + "price": 210000, + "url": "https://www.remax-tresamigos-cr.com/property/serendipity-ocean-view-lot-9-lomas-del-mar" + }, { + "uid": "remax_property_20", + "name": "Hermosa Heights 31", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/HH31%20YT.jpg?itok=Ydma3gSj"], + "price": 215000, + "url": "https://www.remax-tresamigos-cr.com/property/hermosa-heights-31" + }, { + "uid": "remax_property_21", + "name": "Pacifico Clubside 506", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/PacificoPools2_0.jpg?itok=8i9X_FIj"], + "price": 215000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-clubside-506" + }, { + "uid": "remax_property_22", + "name": "Pacifico C 507", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20C%20507%20s%20001.jpg?itok=BvR60pmt"], + "price": 219000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-c-507" + }, { + "uid": "remax_property_23", + "name": "Cacique Lot 114", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/140_John%20Davidson%20Cacique%20006.JPG?itok=ZqHsqx-e"], + "price": 220000, + "url": "https://www.remax-tresamigos-cr.com/property/cacique-lot-114" + }, { + "uid": "remax_property_24", + "name": "Lomas del Mar Lot 220", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Day%20of%20Lots-26.jpg?itok=cMqpVUtq"], + "price": 220000, + "url": "https://www.remax-tresamigos-cr.com/property/lomas-del-mar-lot-220" + }, { + "uid": "remax_property_25", + "name": "Monte Bello Lot 1", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Lot%201%20View%20cropped.JPG?itok=ClVpNXSp"], + "price": 225000, + "url": "https://www.remax-tresamigos-cr.com/property/monte-bello-lot-1-0" + }, { + "uid": "remax_property_26", + "name": "Monte Paraiso lot 26-PRICE REDUCED!!", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/IMG_3776.JPG?itok=vcmppeQZ"], + "price": 225000, + "url": "https://www.remax-tresamigos-cr.com/property/monte-paraiso-lot-26-price-reduced" + }, { + "uid": "remax_property_27", + "name": "Monte Bello Lot 2", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/IMG_2349%20cropped.JPG?itok=ax_KGmyN"], + "price": 225000, + "url": "https://www.remax-tresamigos-cr.com/property/monte-bello-lot-2" + }, { + "uid": "remax_property_28", + "name": "Casa Velu", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/DSCN8240.jpg?itok=-RXyG6rT"], + "price": 225000, + "url": "https://www.remax-tresamigos-cr.com/property/casa-velu" + }, { + "uid": "remax_property_29", + "name": "Pacifico C 402", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20C%20402%20s%20001.jpg?itok=15jrhC9i"], + "price": 225000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-c-402" + }, { + "uid": "remax_property_30", + "name": "Serendipity Ocean View Lot 8 Lomas Del Mar", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Lot%208%20-%201.jpg?itok=x9N-8tlf"], + "price": 225000, + "url": "https://www.remax-tresamigos-cr.com/property/serendipity-ocean-view-lot-8-lomas-del-mar" + }, { + "uid": "remax_property_31", + "name": "Villas Sol #53", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Villa%20Sol%2053-1_0.jpg?itok=2iX9cWDF"], + "price": 225000, + "url": "https://www.remax-tresamigos-cr.com/property/villas-sol-53" + }, { + "uid": "remax_property_32", + "name": "Serendipity Ocean View Lot 10 Lomas Del Mar", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Lot%2010%20-%201.jpg?itok=paSPWxIX"], + "price": 225000, + "url": "https://www.remax-tresamigos-cr.com/property/serendipity-ocean-view-lot-10-lomas-del-mar" + }, { + "uid": "remax_property_33", + "name": "Los Almendros 30", + "location": { + "name": "Playa Ocotal", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Los%20Almendros%2030%20YT.jpg?itok=PN0rXNGR"], + "price": 225900, + "url": "https://www.remax-tresamigos-cr.com/property/los-almendros-30" + }, { + "uid": "remax_property_34", + "name": "Hermosa Heights Lot 64", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Hermosa%20Heights%20Lot%2064%20s%20001.jpg?itok=sPCh-K0M"], + "price": 229000, + "url": "https://www.remax-tresamigos-cr.com/property/hermosa-heights-lot-64" + }, { + "uid": "remax_property_35", + "name": "Coco Joya 11", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Coco%20Joya%2011%20s%20001.jpg?itok=xXmENDDk"], + "price": 229000, + "url": "https://www.remax-tresamigos-cr.com/property/coco-joya-11" + }, { + "uid": "remax_property_36", + "name": "Pacifico Lot 10", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20Lot%2010%20001.jpg?itok=c1ENTCEv"], + "price": 230000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-lot-10" + }, { + "uid": "remax_property_37", + "name": "Solarium D-18", + "location": { + "name": null, + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/7_HPIM1483.JPG?itok=a_yIWBw1"], + "price": 230000, + "url": "https://www.remax-tresamigos-cr.com/property/solarium-d-18" + }, { + "uid": "remax_property_38", + "name": "Hermosa Heights 32", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/007.jpg?itok=LlDgDsSM"], + "price": 230000, + "url": "https://www.remax-tresamigos-cr.com/property/hermosa-heights-32" + }, { + "uid": "remax_property_39", + "name": "Serendipity Ocean View Lot 7 Lomas Del Mar", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Lot%207%20-%201.jpg?itok=QbAIeY5R"], + "price": 230000, + "url": "https://www.remax-tresamigos-cr.com/property/serendipity-ocean-view-lot-7-lomas-del-mar" + }, { + "uid": "remax_property_40", + "name": "EL CUBIL", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/1950_38_DSC_2586.JPG?itok=mUfVZ_X_"], + "price": 230000, + "url": "https://www.remax-tresamigos-cr.com/property/el-cubil" + }, { + "uid": "remax_property_41", + "name": "Vista Ocotal 8", + "location": { + "name": "Playa Ocotal", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Vista%20Ocotal41.JPG?itok=Xu46fLd8"], + "price": 235000, + "url": "https://www.remax-tresamigos-cr.com/property/vista-ocotal-8" + }, { + "uid": "remax_property_42", + "name": "Ground Floor Pool Side Pacifico L505", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20L505-1.jpg?itok=Ux3Nkx2P"], + "price": 235000, + "url": "https://www.remax-tresamigos-cr.com/property/ground-floor-pool-side-pacifico-l505" + }, { + "uid": "remax_property_43", + "name": "Pacifico L 1204", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20L%201204%20s%20001_0.jpg?itok=S0yBEJxg"], + "price": 235000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-l-1204" + }, { + "uid": "remax_property_44", + "name": "Pacifico L614", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Terrace%20View.jpg?itok=6xRn9wUI"], + "price": 239000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-l614" + }, { + "uid": "remax_property_0", + "name": "Pacifico L 1202", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20L%201202%20s%20001.jpg?itok=rdruiq0v"], + "price": 239000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-l-1202" + }, { + "uid": "remax_property_1", + "name": "Condo Pacifico L-1214", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/a_0.jpg?itok=JuF-hihK"], + "price": 239000, + "url": "https://www.remax-tresamigos-cr.com/property/condo-pacifico-l-1214" + }, { + "uid": "remax_property_2", + "name": "Pacifico C 207", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20C%20207%20s%20001_0.jpg?itok=BD6YC9oP"], + "price": 239000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-c-207" + }, { + "uid": "remax_property_3", + "name": "Valle del Sol #10", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Valle%20del%20Sol%2010%20s%20001.jpg?itok=Lt0GCFCE"], + "price": 239900, + "url": "https://www.remax-tresamigos-cr.com/property/valle-del-sol-10" + }, { + "uid": "remax_property_4", + "name": "Pacifico Heights Ocean View Lot 3", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20Heights%203-11_0.jpg?itok=FSsIK8l1"], + "price": 240000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-heights-ocean-view-lot-3" + }, { + "uid": "remax_property_5", + "name": "Horse Lovers' Dream", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/DSC_2065%20%281%29.jpg?itok=9WXoxVD8"], + "price": 240000, + "url": "https://www.remax-tresamigos-cr.com/property/horse-lovers-dream" + }, { + "uid": "remax_property_6", + "name": "Bella Vista Ocean View Condo", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Dining%20Area_0.jpg?itok=Q-gTrXeT"], + "price": 242000, + "url": "https://www.remax-tresamigos-cr.com/property/bella-vista-ocean-view-condo" + }, { + "uid": "remax_property_7", + "name": "Casa Palapa", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/DSCN6965.JPG?itok=BYsnhC6P"], + "price": 245000, + "url": "https://www.remax-tresamigos-cr.com/property/casa-palapa" + }, { + "uid": "remax_property_8", + "name": "Pacifico L1014", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Terrace-25b004ce279729.jpg?itok=GaRMRzF7"], + "price": 247000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-l1014" + }, { + "uid": "remax_property_9", + "name": "Sombras 201", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pool-4.jpg?itok=HDrNtKMq"], + "price": 247000, + "url": "https://www.remax-tresamigos-cr.com/property/sombras-201" + }, { + "uid": "remax_property_10", + "name": "Palo Alto Lot 32", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/64_IMGP0232.JPG?itok=H__Xt3oi"], + "price": 249000, + "url": "https://www.remax-tresamigos-cr.com/property/palo-alto-lot-32" + }, { + "uid": "remax_property_11", + "name": "Dzugalo Lot", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/DSCN1367.JPG?itok=BYc46PcT"], + "price": 249000, + "url": "https://www.remax-tresamigos-cr.com/property/dzugalo-lot" + }, { + "uid": "remax_property_12", + "name": "Sombras 501", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Sombras%20501%20YT.jpg?itok=mVXKTjy1"], + "price": 249000, + "url": "https://www.remax-tresamigos-cr.com/property/sombras-501" + }, { + "uid": "remax_property_13", + "name": "Serendipity Ocean View Lot 12 Lomas Del Mar", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Lot%2012%20-%201.jpg?itok=1-qWjq_3"], + "price": 249000, + "url": "https://www.remax-tresamigos-cr.com/property/serendipity-ocean-view-lot-12-lomas-del-mar" + }, { + "uid": "remax_property_14", + "name": "Casa Molina", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Copy%20of%20DSC00912.JPG?itok=4y5nIESX"], + "price": 250000, + "url": "https://www.remax-tresamigos-cr.com/property/casa-molina" + }, { + "uid": "remax_property_15", + "name": "Serendipity Ocean View Lots Lot 5 & 6 Lomas Del Mar", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Lot%205%20-%201.jpg?itok=9N5l77B4"], + "price": 250000, + "url": "https://www.remax-tresamigos-cr.com/property/serendipity-ocean-view-lots-lot-5-6-lomas-del-mar" + }, { + "uid": "remax_property_16", + "name": "Pacifico L 1206", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20L%201206%20003.jpg?itok=n52F3nnQ"], + "price": 250000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-l-1206" + }, { + "uid": "remax_property_17", + "name": "Serendipity Ocean View Lot 1 Lomas Del Mar", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/1_29.jpg?itok=ANhBuxvG"], + "price": 250000, + "url": "https://www.remax-tresamigos-cr.com/property/serendipity-ocean-view-lot-1-lomas-del-mar" + }, { + "uid": "remax_property_18", + "name": "6 acre hobby farm parcel", + "location": { + "name": null, + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/93_DSCN3122.JPG?itok=T7Er4JIv"], + "price": 250000, + "url": "https://www.remax-tresamigos-cr.com/property/6-acre-hobby-farm-parcel" + }, { + "uid": "remax_property_19", + "name": "Ocean View Lot Mar Vista Estates 20 1.4 acre Click to see...", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/173_Steve%20web.JPG?itok=ulAWxJyg"], + "price": 250000, + "url": "https://www.remax-tresamigos-cr.com/property/ocean-view-lot-mar-vista-estates-20-14-acre-click-see-video" + }, { + "uid": "remax_property_20", + "name": "Mar Vista 7", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Mar%20Vista%207-17.jpg?itok=C6-OZCUc"], + "price": 250000, + "url": "https://www.remax-tresamigos-cr.com/property/mar-vista-7" + }, { + "uid": "remax_property_21", + "name": "Sombras #104 - 3 Bed/2 Bath", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Sombras104.26.jpg?itok=H6900HtW"], + "price": 254000, + "url": "https://www.remax-tresamigos-cr.com/property/sombras-104-3-bed2-bath" + }, { + "uid": "remax_property_22", + "name": "Pacifico L208", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Terrace%20View-1.jpg?itok=GevsH5hG"], + "price": 255000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-l208" + }, { + "uid": "remax_property_23", + "name": "Bella Vista Ocean View Condo. Owner Financing Available!", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/View%204.jpg?itok=BUX2q_fj"], + "price": 255000, + "url": "https://www.remax-tresamigos-cr.com/property/bella-vista-ocean-view-condo-owner-financing-available" + }, { + "uid": "remax_property_24", + "name": "Los Retoños A", + "location": { + "name": null, + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/DSCN7908.JPG?itok=ZdbBVgFS"], + "price": 258000, + "url": "https://www.remax-tresamigos-cr.com/property/los-reto%C3%B1os" + }, { + "uid": "remax_property_25", + "name": "Pacifico L 1011", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacfiico%20L%201011%20001.jpg?itok=8PA_OZIJ"], + "price": 259000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-l-1011" + }, { + "uid": "remax_property_26", + "name": "Monte Bello Lot 38", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/MB38-10.jpg?itok=1Uy-ts1m"], + "price": 259000, + "url": "https://www.remax-tresamigos-cr.com/property/monte-bello-lot-38" + }, { + "uid": "remax_property_27", + "name": "Pacifico L 214", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20L%20214%20s%20001.jpg?itok=xjbVNf_h"], + "price": 259000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-l-214" + }, { + "uid": "remax_property_28", + "name": "Pacifico L1004", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/3%20%283%29.jpg?itok=wz6Ys5Py"], + "price": 259000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-l1004" + }, { + "uid": "remax_property_29", + "name": "Mar Vista Lot 24", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Mar%20Vista%20Lot%2024%20resize%201.jpg?itok=jQJEcoTS"], + "price": 259000, + "url": "https://www.remax-tresamigos-cr.com/property/mar-vista-lot-24" + }, { + "uid": "remax_property_30", + "name": "Hermosa Heights Lot 63", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Hermosa%20Heights%20Lot%2063%20s%20001.jpg?itok=EEKMViFJ"], + "price": 259000, + "url": "https://www.remax-tresamigos-cr.com/property/hermosa-heights-lot-63" + }, { + "uid": "remax_property_31", + "name": "Pacifico L 1007", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20L%201007%20s%20001.jpg?itok=Zccble4t"], + "price": 259900, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-l-1007" + }, { + "uid": "remax_property_32", + "name": "Pacifico L 309", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20L%20309%20s%20001.jpg?itok=VWB0nq9F"], + "price": 265000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-l-309" + }, { + "uid": "remax_property_33", + "name": "Casa Michnal", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Casa%20Michnal%20YT.jpg?itok=Egjsb0sl"], + "price": 265000, + "url": "https://www.remax-tresamigos-cr.com/property/casa-michnal" + }, { + "uid": "remax_property_34", + "name": "Vista Del Pacifico 28B", + "location": { + "name": "Playa Panama", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/64_IMGP0320.JPG?itok=nDYapesq"], + "price": 270000, + "url": "https://www.remax-tresamigos-cr.com/property/vista-del-pacifico-28b" + }, { + "uid": "remax_property_35", + "name": "Pacifico L 809", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20L809%20001.jpg?itok=09Jqpc9S"], + "price": 274900, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-l-809" + }, { + "uid": "remax_property_36", + "name": "Hermosa del Mar 2-1B", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/HDM2_1.jpg?itok=Hxpfy2H9"], + "price": 275000, + "url": "https://www.remax-tresamigos-cr.com/property/hermosa-del-mar-2-1b" + }, { + "uid": "remax_property_37", + "name": "Commercial Lot 10 minutes to Airport", + "location": { + "name": null, + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/45_Prime%20location%20commercial%20lotweb.JPG?itok=K6hctBE4"], + "price": 275000, + "url": "https://www.remax-tresamigos-cr.com/property/commercial-lot-10-minutes-airport" + }, { + "uid": "remax_property_38", + "name": "Restaurant Opportunity Playa Hermosa", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/El%20Quijote-1.jpg?itok=j_XOiXid"], + "price": 275000, + "url": "https://www.remax-tresamigos-cr.com/property/restaurant-opportunity-playa-hermosa" + }, { + "uid": "remax_property_39", + "name": "Pacifico L 804", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20L804%20s%20001.jpg?itok=L5ESh755"], + "price": 275000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-l-804" + }, { + "uid": "remax_property_40", + "name": "Vista Ocean View Lots", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/222_Picture%20046.JPG?itok=ef2JW1zM"], + "price": 275000, + "url": "https://www.remax-tresamigos-cr.com/property/vista-ocean-view-lots" + }, { + "uid": "remax_property_41", + "name": "Monte Bello Ocean View Lots", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/73_monte%20bello%20small00002.JPG?itok=hplNyD2y"], + "price": 275000, + "url": "https://www.remax-tresamigos-cr.com/property/monte-bello-ocean-view-lots" + }, { + "uid": "remax_property_42", + "name": "Serendipity Ocean View Lot 2 Lomas Del Mar", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Lot%202%20-%201.jpg?itok=aD32Yhd8"], + "price": 275000, + "url": "https://www.remax-tresamigos-cr.com/property/serendipity-ocean-view-lot-2-lomas-del-mar" + }, { + "uid": "remax_property_43", + "name": "Coco Sunset Hills 47", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/CSH%2047-1.jpg?itok=Vw_6WMdr"], + "price": 279000, + "url": "https://www.remax-tresamigos-cr.com/property/coco-sunset-hills-47" + }, { + "uid": "remax_property_44", + "name": "Playas del Coco, Habitat Magico", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Habitat%20Magico-5.jpg?itok=jeT2hQlb"], + "price": 279000, + "url": "https://www.remax-tresamigos-cr.com/property/playas-del-coco-habitat-magico" + }, { + "uid": "remax_property_0", + "name": "Pacifico L 407", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20L%20407%20001.jpg?itok=FrEL0O9q"], + "price": 279000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-l-407" + }, { + "uid": "remax_property_1", + "name": "Casa La Mariposa", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/La%20Mariposa-6.jpg?itok=yVo_zqBa"], + "price": 279000, + "url": "https://www.remax-tresamigos-cr.com/property/casa-la-mariposa" + }, { + "uid": "remax_property_2", + "name": "Casa Mireya", + "location": { + "name": null, + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/IMG_1812-min_0.JPG?itok=gY_QP09Z"], + "price": 280000, + "url": "https://www.remax-tresamigos-cr.com/property/casa-mireya" + }, { + "uid": "remax_property_3", + "name": "Corona del Mar B6", + "location": { + "name": "Playa Ocotal", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/1947_58_CoronaDelMarHR-70-min.JPG?itok=EESPY0Dg"], + "price": 280000, + "url": "https://www.remax-tresamigos-cr.com/property/corona-del-mar-b6" + }, { + "uid": "remax_property_4", + "name": "Hermosa del Mar 1-3C", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/1893_52_IMG_7512.JPG?itok=JCaiqYQj"], + "price": 285000, + "url": "https://www.remax-tresamigos-cr.com/property/hermosa-del-mar-1-3c" + }, { + "uid": "remax_property_5", + "name": "Pacifico C404", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/C404%20YT%20.jpg?itok=55pwI_Cq"], + "price": 285000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-c404" + }, { + "uid": "remax_property_6", + "name": "Ocean Breeze 9", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/OB%20-%201.jpg?itok=0ccbue5K"], + "price": 285000, + "url": "https://www.remax-tresamigos-cr.com/property/ocean-breeze-9" + }, { + "uid": "remax_property_7", + "name": "Pacifico C401", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/C401%20YT%20.jpg?itok=RK52iTc0"], + "price": 285000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-c401" + }, { + "uid": "remax_property_8", + "name": "Guayabo 138 Acres Click to see video", + "location": { + "name": null, + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/174_Guayabo%20017.JPG?itok=udUAxrnj"], + "price": 288000, + "url": "https://www.remax-tresamigos-cr.com/property/guayabo-138-acres-click-see-video" + }, { + "uid": "remax_property_9", + "name": "Pacifico C 304", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20C%20304%20small%201.jpg?itok=sgHCo9Cc"], + "price": 289000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-c-304" + }, { + "uid": "remax_property_10", + "name": "Pacifico C108", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20C108%20-%20YT.jpg?itok=ukQLQYyN"], + "price": 289000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-c108" + }, { + "uid": "remax_property_11", + "name": "Pacifico C 406", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/C406%20YT%20.jpg?itok=VCkc_hXk"], + "price": 289000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-c-406" + }, { + "uid": "remax_property_12", + "name": "Pacifico Clubside 508", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Slide1.JPG?itok=jOnHMlJs"], + "price": 295000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-clubside-508-0" + }, { + "uid": "remax_property_13", + "name": "Pacifico Clubside 508", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/DSC00303%20copy-min_0.jpg?itok=eKPH09Qg"], + "price": 295000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-clubside-508" + }, { + "uid": "remax_property_14", + "name": "Coco Lot - Easy Build - Price Drop", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/2_0.JPG?itok=Qem4_JmS"], + "price": 295000, + "url": "https://www.remax-tresamigos-cr.com/property/coco-lot-easy-build-price-drop" + }, { + "uid": "remax_property_15", + "name": "Hermosa del Mar 2-1C", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/HdM%202-1C-10_0.jpg?itok=gLg4sC5l"], + "price": 299000, + "url": "https://www.remax-tresamigos-cr.com/property/hermosa-del-mar-2-1c" + }, { + "uid": "remax_property_16", + "name": "Monte Bello Lot 36", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Monte%20Bello%20Lot%2036%20s%20001.jpg?itok=mpOFIk_j"], + "price": 299000, + "url": "https://www.remax-tresamigos-cr.com/property/monte-bello-lot-36" + }, { + "uid": "remax_property_17", + "name": "Villa Verde", + "location": { + "name": "Playa Panama", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/1771_29_Casa%20Bogdan%201.JPG?itok=uNf9sQTk"], + "price": 299000, + "url": "https://www.remax-tresamigos-cr.com/property/villa-verde" + }, { + "uid": "remax_property_18", + "name": "Casa Kahle", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Casa%20Kahle-1.jpg?itok=sh8QO5I6"], + "price": 299000, + "url": "https://www.remax-tresamigos-cr.com/property/casa-kahle" + }, { + "uid": "remax_property_19", + "name": "Ocean Breeze Condo # 10", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/DSCN8761.JPG?itok=nBWhEDJf"], + "price": 299000, + "url": "https://www.remax-tresamigos-cr.com/property/ocean-breeze-condo-10" + }, { + "uid": "remax_property_20", + "name": "Monte Bello Lot 3", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Monte%20Bello%20Lot%203%20social.jpg?itok=1D_kmLxB"], + "price": 299000, + "url": "https://www.remax-tresamigos-cr.com/property/monte-bello-lot-3" + }, { + "uid": "remax_property_21", + "name": "Ocean View Lot 213 Lomas Del Mar", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/1885_55_3.JPG?itok=Dxfm-Rx1"], + "price": 299000, + "url": "https://www.remax-tresamigos-cr.com/property/ocean-view-lot-213-lomas-del-mar" + }, { + "uid": "remax_property_22", + "name": "Salvador Lot", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/84_IMGP0694.JPG?itok=ruTQ-YSu"], + "price": 299900, + "url": "https://www.remax-tresamigos-cr.com/property/salvador-lot" + }, { + "uid": "remax_property_23", + "name": "Casa Amanecer", + "location": { + "name": null, + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Casa%20Amanecer%20YT.jpg?itok=NvgtXQOx"], + "price": 299999, + "url": "https://www.remax-tresamigos-cr.com/property/casa-amanecer" + }, { + "uid": "remax_property_24", + "name": "Ladera del Mar, Monte Vista #8", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/1_7.jpg?itok=0EI__1t3"], + "price": 309500, + "url": "https://www.remax-tresamigos-cr.com/property/ladera-del-mar-monte-vista-8" + }, { + "uid": "remax_property_25", + "name": "Hermosa del Mar 2-3A", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/1894_124_IMG_7512.JPG?itok=Lq77QvnV"], + "price": 310000, + "url": "https://www.remax-tresamigos-cr.com/property/hermosa-del-mar-2-3a" + }, { + "uid": "remax_property_26", + "name": "LdM Lot 131", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Lomas%20131-35.jpg?itok=qxOUGAG8"], + "price": 310000, + "url": "https://www.remax-tresamigos-cr.com/property/ldm-lot-131" + }, { + "uid": "remax_property_27", + "name": "Casa Los Altos del Cacique #103", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/DSCN7274_1.JPG?itok=GA3Oqvx6"], + "price": 315000, + "url": "https://www.remax-tresamigos-cr.com/property/casa-los-altos-del-cacique-103" + }, { + "uid": "remax_property_28", + "name": "Vista Ridge Hilltop Villa", + "location": { + "name": null, + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/DiningKitchen1a.jpg?itok=-YEwBG1-"], + "price": 315000, + "url": "https://www.remax-tresamigos-cr.com/property/vista-ridge-hilltop-villa" + }, { + "uid": "remax_property_29", + "name": "Casa Preston", + "location": { + "name": null, + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/245_40.JPG?itok=Pdf8PHH9"], + "price": 319000, + "url": "https://www.remax-tresamigos-cr.com/property/casa-preston" + }, { + "uid": "remax_property_30", + "name": "Baywatch View Lot", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/01_4.jpg?itok=pTaHKPaD"], + "price": 319000, + "url": "https://www.remax-tresamigos-cr.com/property/baywatch-view-lot" + }, { + "uid": "remax_property_31", + "name": "Sol Y Mar 4B", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/2016-01-14_11-48-25.jpg?itok=LOk69UcF"], + "price": 319000, + "url": "https://www.remax-tresamigos-cr.com/property/sol-y-mar-4b" + }, { + "uid": "remax_property_32", + "name": "Alta Vista Killer View Lot JUST REDUCED", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/126_DSC02438%20web.JPG?itok=6VzXrIa7"], + "price": 319000, + "url": "https://www.remax-tresamigos-cr.com/property/alta-vista-killer-view-lot-just-reduced" + }, { + "uid": "remax_property_33", + "name": "Hermosa Commercial lot on main road", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/default_images/noimage.gif?itok=ylryoEGs"], + "price": 320000, + "url": "https://www.remax-tresamigos-cr.com/property/hermosa-commercial-lot-main-road" + }, { + "uid": "remax_property_34", + "name": "Pacifico C408 Reduce by $100,000", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Dining%20Area%201_2.jpg?itok=xGsG9Fur"], + "price": 320000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-c408-reduce-100000" + }, { + "uid": "remax_property_35", + "name": "Panama Ocean View Lot", + "location": { + "name": "Playa Panama", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/222_Use%20-%20Ocean%20view%20from%20lot.JPG?itok=r7h3O429"], + "price": 325000, + "url": "https://www.remax-tresamigos-cr.com/property/panama-ocean-view-lot" + }, { + "uid": "remax_property_36", + "name": "Pacifico TH 101", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20TH%20101%20001.jpg?itok=RMQk4zbF"], + "price": 325000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-th-101" + }, { + "uid": "remax_property_37", + "name": "Serendipity Ocean View Lot 4 Lomas Del Mar", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Lot%204%20-%201.jpg?itok=_uNoqOwT"], + "price": 325000, + "url": "https://www.remax-tresamigos-cr.com/property/serendipity-ocean-view-lot-4-lomas-del-mar" + }, { + "uid": "remax_property_38", + "name": "Hermosa Montana Lot #1", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/208_9.JPG?itok=K26JSvnP"], + "price": 325000, + "url": "https://www.remax-tresamigos-cr.com/property/hermosa-montana-lot-1-0" + }, { + "uid": "remax_property_39", + "name": "Cacique Lot 42 House", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Cacique%20Lot%2042%20House%20s%20002.jpg?itok=PyrbdEfw"], + "price": 325000, + "url": "https://www.remax-tresamigos-cr.com/property/cacique-lot-42-house" + }, { + "uid": "remax_property_40", + "name": "Montebello Lot #11", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/DSCN7850.JPG?itok=AsTKY-fF"], + "price": 325000, + "url": "https://www.remax-tresamigos-cr.com/property/montebello-lot-11" + }, { + "uid": "remax_property_41", + "name": "Pacifico Townhome TH 201", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Exterior%203-min.png?itok=4SIOFomR"], + "price": 325000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-townhome-th-201" + }, { + "uid": "remax_property_42", + "name": "Ocean front lot Playa Junquillal See Video", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/177_New%20Panoramic3.JPG?itok=02wEUeiy"], + "price": 325000, + "url": "https://www.remax-tresamigos-cr.com/property/ocean-front-lot-playa-junquillal-see-video" + }, { + "uid": "remax_property_43", + "name": "Casa Nido", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Casa%20Nido%20YT_1.jpg?itok=_01cEPDQ"], + "price": 329000, + "url": "https://www.remax-tresamigos-cr.com/property/casa-nido" + }, { + "uid": "remax_property_44", + "name": "Pacifico L806", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20L%20806%20001.jpg?itok=FLpUvYRP"], + "price": 329000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-l806" + }, { + "uid": "remax_property_0", + "name": "Casa del Puente", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/a.jpg?itok=k-ximval"], + "price": 330000, + "url": "https://www.remax-tresamigos-cr.com/property/casa-del-puente" + }, { + "uid": "remax_property_1", + "name": "Finca La Germania", + "location": { + "name": null, + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/IMG-2073.JPG?itok=V3EHnS3u"], + "price": 335000, + "url": "https://www.remax-tresamigos-cr.com/property/finca-la-germania" + }, { + "uid": "remax_property_2", + "name": "Beach Apartment Casa Marina", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/1896_34_DSCN4973.JPG?itok=Et5aldYl"], + "price": 335000, + "url": "https://www.remax-tresamigos-cr.com/property/beach-apartment-casa-marina" + }, { + "uid": "remax_property_3", + "name": "Casa Palmares Playa Hermosa", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/041.jpg?itok=rM3VrvY9"], + "price": 335000, + "url": "https://www.remax-tresamigos-cr.com/property/casa-palmares-playa-hermosa" + }, { + "uid": "remax_property_4", + "name": "Lomas Del Mar Casa Dunn", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/1836_216_Casa%20Dunn%20YT%20%281%29.JPG?itok=LrPazA5n"], + "price": 338000, + "url": "https://www.remax-tresamigos-cr.com/property/lomas-del-mar-casa-dunn" + }, { + "uid": "remax_property_5", + "name": "Las Briasa Playa Hermosa 3.2 UNDER CONTRACT!", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Las%20Brisas-1.jpg?itok=-KmDu0XZ"], + "price": 338000, + "url": "https://www.remax-tresamigos-cr.com/property/las-briasa-playa-hermosa-32-under-contract" + }, { + "uid": "remax_property_6", + "name": "Hermosa Heights Rock Star Lot SEE VIDEO REDUCED BY $100,000", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/67_Bonnie%20007%20web.JPG?itok=pHYi5L_N"], + "price": 339000, + "url": "https://www.remax-tresamigos-cr.com/property/hermosa-heights-rock-star-lot-see-video-reduced-100000" + }, { + "uid": "remax_property_7", + "name": "Pacifico L 301", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20L%20301%20002.jpg?itok=qt8P-UAM"], + "price": 339000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-l-301" + }, { + "uid": "remax_property_8", + "name": "El Oasis 355,356,357", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/El%20Oasis%20355%2C%2056%2C%2057%20001.jpg?itok=Sn2cdHUD"], + "price": 339000, + "url": "https://www.remax-tresamigos-cr.com/property/el-oasis-355356357" + }, { + "uid": "remax_property_9", + "name": "Pacifico L 305", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20L%20305%20001.jpg?itok=5tsdYAle"], + "price": 339000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-l-305" + }, { + "uid": "remax_property_10", + "name": "Pacifico L611", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/L611%20YT.jpg?itok=zjE7kCj3"], + "price": 345000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-l611" + }, { + "uid": "remax_property_11", + "name": "Pacifico L 615", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20L615%20Social.jpg?itok=wSWCZv6p"], + "price": 349000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-l-615" + }, { + "uid": "remax_property_12", + "name": "Pacifico Lot 48", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20Lot%2048%20-%20YT.jpg?itok=l8yS9Qrx"], + "price": 349000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-lot-48" + }, { + "uid": "remax_property_13", + "name": "Pacifico L 306", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20L%20306%20007.jpg?itok=CLU5XD5g"], + "price": 349000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-l-306" + }, { + "uid": "remax_property_14", + "name": "Above the Beach at Playa Hermosa", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Above%20the%20Beach%20Lot%20in%20Playa%20Hermosa%20r%201.jpg?itok=PR-30Wz9"], + "price": 349000, + "url": "https://www.remax-tresamigos-cr.com/property/above-beach-playa-hermosa" + }, { + "uid": "remax_property_15", + "name": "Alta Vista - Main Road frontage", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/9_pics%20010.JPG?itok=gypMe6uW"], + "price": 350000, + "url": "https://www.remax-tresamigos-cr.com/property/alta-vista-main-road-frontage" + }, { + "uid": "remax_property_16", + "name": "Casa Luna Liberia", + "location": { + "name": null, + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/CasaLunaLiberia-33.jpg?itok=26RV7U0I"], + "price": 350000, + "url": "https://www.remax-tresamigos-cr.com/property/casa-luna-liberia" + }, { + "uid": "remax_property_17", + "name": "Bahia Pez Vela Villa #14 - Villa Paraiso $350,000", + "location": { + "name": "Playa Ocotal", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/villa-14-10-ret-small-150x150.jpg?itok=ZISf0I8Y"], + "price": 350000, + "url": "https://www.remax-tresamigos-cr.com/property/bahia-pez-vela-villa-14-villa-paraiso-350000" + }, { + "uid": "remax_property_18", + "name": "Papagayo 1ha Ocean View Lot", + "location": { + "name": "Papagayo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/1_10.jpg?itok=MzRZ7IT6"], + "price": 350000, + "url": "https://www.remax-tresamigos-cr.com/property/papagayo-1ha-ocean-view-lot" + }, { + "uid": "remax_property_19", + "name": "Casa Pacific Breeze No.1", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/PHOTO-2019-02-26-16-07-30_1.jpg?itok=bTFhj8RL"], + "price": 359000, + "url": "https://www.remax-tresamigos-cr.com/property/casa-pacific-breeze-no1" + }, { + "uid": "remax_property_20", + "name": "Monte Paraiso Lot 15", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/226_Road%20infront%20of%20Lot.JPG?itok=aHeY1KId"], + "price": 359000, + "url": "https://www.remax-tresamigos-cr.com/property/monte-paraiso-lot-15" + }, { + "uid": "remax_property_21", + "name": "Hermosa del Mar 1-5C", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/HdM%201-5C%20YT.jpg?itok=yuVnKyCy"], + "price": 365000, + "url": "https://www.remax-tresamigos-cr.com/property/hermosa-del-mar-1-5c" + }, { + "uid": "remax_property_22", + "name": "Kokomo Lot", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/33_005%20-%20Copy.JPG?itok=mCDxKvQA"], + "price": 369000, + "url": "https://www.remax-tresamigos-cr.com/property/kokomo-lot" + }, { + "uid": "remax_property_23", + "name": "Pacifico Townhome 203", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20TH%20203%20001.jpg?itok=MnBri3iI"], + "price": 369000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-townhome-203" + }, { + "uid": "remax_property_24", + "name": "Graceland - Casa Priscilla Walk to Beach Luxury 4 bed Villa See...", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/102_DSCN1500.JPG?itok=7BX7yOCi"], + "price": 369000, + "url": "https://www.remax-tresamigos-cr.com/property/graceland-casa-priscilla-walk-beach-luxury-4-bed-villa-see-video" + }, { + "uid": "remax_property_25", + "name": "Casa de Bienestar", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/00_0.jpg?itok=SgmbBob-"], + "price": 375000, + "url": "https://www.remax-tresamigos-cr.com/property/casa-de-bienestar" + }, { + "uid": "remax_property_26", + "name": "Monte Bello Lot 30", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Monte%20Bello%20Lot%2030%20001.jpg?itok=7JSjHEvZ"], + "price": 375000, + "url": "https://www.remax-tresamigos-cr.com/property/monte-bello-lot-30" + }, { + "uid": "remax_property_27", + "name": "Hermosa Montana Lot 8", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/193_Hermosa%20Montana%20Lot%208%20s%20001.JPG?itok=L7s2fhEs"], + "price": 375000, + "url": "https://www.remax-tresamigos-cr.com/property/hermosa-montana-lot-8" + }, { + "uid": "remax_property_28", + "name": "Office Building Downtown Playas Del Coco", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/48_SAM_5386.JPG?itok=Lh8jZpim"], + "price": 375000, + "url": "https://www.remax-tresamigos-cr.com/property/office-building-downtown-playas-del-coco" + }, { + "uid": "remax_property_29", + "name": "Bahia Pez Vela #21 **Price Reduced**", + "location": { + "name": "Playa Ocotal", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/238_DSC00050.JPG?itok=CZq2YSy4"], + "price": 379000, + "url": "https://www.remax-tresamigos-cr.com/property/bahia-pez-vela-21-price-reduced" + }, { + "uid": "remax_property_30", + "name": "Pacifico Townhome 204", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/TH%20201%20s%20001.jpg?itok=FMBeRZXR"], + "price": 379000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-townhome-204" + }, { + "uid": "remax_property_31", + "name": "Casa Mañana", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Casa%20Manana-14.jpg?itok=ppitOQrp"], + "price": 380000, + "url": "https://www.remax-tresamigos-cr.com/property/casa-ma%C3%B1ana" + }, { + "uid": "remax_property_32", + "name": "Finca La Justina", + "location": { + "name": null, + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Finca%20La%20Justina.jpg?itok=pVDqrdv_"], + "price": 385000, + "url": "https://www.remax-tresamigos-cr.com/property/finca-la-justina" + }, { + "uid": "remax_property_33", + "name": "Ocotal Serenity Lot", + "location": { + "name": "Playa Ocotal", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Aerial%201.jpg?itok=FIB6OoL7"], + "price": 395000, + "url": "https://www.remax-tresamigos-cr.com/property/ocotal-serenity-lot" + }, { + "uid": "remax_property_34", + "name": "Coco Commercial Lot", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/2016-07-26_11-38-02.jpg?itok=oAiSqDv3"], + "price": 395000, + "url": "https://www.remax-tresamigos-cr.com/property/coco-commercial-lot" + }, { + "uid": "remax_property_35", + "name": "Pacifico Heights 10, Playas del Coco", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20Heights%2010-12.jpg?itok=lyPU2j0R"], + "price": 395000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-heights-10-playas-del-coco" + }, { + "uid": "remax_property_36", + "name": "Monte Bello Lot 25", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Monte%20Bello%2025-14.jpg?itok=-q-nbdBe"], + "price": 399000, + "url": "https://www.remax-tresamigos-cr.com/property/monte-bello-lot-25" + }, { + "uid": "remax_property_37", + "name": "Monte Bello Lot 26", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Monte%20Bello%20Lot%2026%20s%20001.jpg?itok=LdoajVWJ"], + "price": 399000, + "url": "https://www.remax-tresamigos-cr.com/property/monte-bello-lot-26" + }, { + "uid": "remax_property_38", + "name": "Casa Zen Playa Hermosa", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Casa%20Zen%20Playa%20Hermosa%20s%20001.jpg?itok=D8pTKVZV"], + "price": 399000, + "url": "https://www.remax-tresamigos-cr.com/property/casa-zen-playa-hermosa" + }, { + "uid": "remax_property_39", + "name": "Playas Del Coco Apartment Complex SEE VIDEO", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/138_New%20Panoramic19.JPG?itok=MFZ_w9xk"], + "price": 399000, + "url": "https://www.remax-tresamigos-cr.com/property/playas-del-coco-apartment-complex-see-video" + }, { + "uid": "remax_property_40", + "name": "Coco Gardens Duplex", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Coco%20Gardens%20Duplex%20s%20001.jpg?itok=4qC_8Y2P"], + "price": 399000, + "url": "https://www.remax-tresamigos-cr.com/property/coco-gardens-duplex" + }, { + "uid": "remax_property_41", + "name": "Casa La Canta Rana", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Casa%20La%20Canta%20Rana%20small%201.jpg?itok=hAlLS6Ol"], + "price": 399000, + "url": "https://www.remax-tresamigos-cr.com/property/casa-la-canta-rana" + }, { + "uid": "remax_property_42", + "name": "Sardinal Farm with 4 homes", + "location": { + "name": null, + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Peter%27s%20Farm-16.jpg?itok=hfK-Drj3"], + "price": 399000, + "url": "https://www.remax-tresamigos-cr.com/property/sardinal-farm-4-homes" + }, { + "uid": "remax_property_43", + "name": "Coco Development Land", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Cespedes%20Finca%20Google%20Earth.jpg?itok=ECpQO3_a"], + "price": 399000, + "url": "https://www.remax-tresamigos-cr.com/property/coco-development-land" + }, { + "uid": "remax_property_44", + "name": "Ranchitos Ridge 13, Ladera del Mar", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/2_6.jpg?itok=zlhOglkq"], + "price": 399500, + "url": "https://www.remax-tresamigos-cr.com/property/ranchitos-ridge-13-ladera-del-mar" + }, { + "uid": "remax_property_0", + "name": "Casa Viviendo", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Casa%20Viviendo-11.jpg?itok=igQA9vXO"], + "price": 399900, + "url": "https://www.remax-tresamigos-cr.com/property/casa-viviendo" + }, { + "uid": "remax_property_1", + "name": "Hermosa-Coco Ridge Ocean View Development Property", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/247_Hermosa-Coco%20Ridge%20Development%20Lots%20maps%20small%201.JPG?itok=tKzIvJq4"], + "price": 400000, + "url": "https://www.remax-tresamigos-cr.com/property/hermosa-coco-ridge-ocean-view-development-property" + }, { + "uid": "remax_property_2", + "name": "Monte Paraiso Lot 3A See video", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/181_photos%20Feb%2029%202008%20020.JPG?itok=FuSMlAp9"], + "price": 400000, + "url": "https://www.remax-tresamigos-cr.com/property/monte-paraiso-lot-3a-see-video" + }, { + "uid": "remax_property_3", + "name": "Graceland Love Me Tender", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Aerial%20View.jpg?itok=aT_5zAdz"], + "price": 425000, + "url": "https://www.remax-tresamigos-cr.com/property/graceland-love-me-tender" + }, { + "uid": "remax_property_4", + "name": "Mariners Point B1", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Mariner%27s%20Point%20B1%20panorama%20small.jpg?itok=bmMC86eY"], + "price": 449000, + "url": "https://www.remax-tresamigos-cr.com/property/mariners-point-b1" + }, { + "uid": "remax_property_5", + "name": "Bay Point 6", + "location": { + "name": "Playa Panama", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Baypoint%206%20001.jpg?itok=dqxNszZi"], + "price": 449000, + "url": "https://www.remax-tresamigos-cr.com/property/bay-point-6" + }, { + "uid": "remax_property_6", + "name": "Lomas Del Mar PG-1 Development lots", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/1796_43_4.JPG?itok=Av12YraC"], + "price": 450000, + "url": "https://www.remax-tresamigos-cr.com/property/lomas-del-mar-pg-1-development-lots" + }, { + "uid": "remax_property_7", + "name": "Hacienda Del Mar ROCK STAR LOTS See Video", + "location": { + "name": "Playa Panama", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/174_DSC02384.JPG?itok=MBz4uGcF"], + "price": 450000, + "url": "https://www.remax-tresamigos-cr.com/property/hacienda-del-mar-rock-star-lots-see-video" + }, { + "uid": "remax_property_8", + "name": "Casa Rancho Rey", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Casa%20107-10.jpg?itok=Db9wu4KY"], + "price": 454895, + "url": "https://www.remax-tresamigos-cr.com/property/casa-rancho-rey" + }, { + "uid": "remax_property_9", + "name": "Mariner’s Point D4", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Mariner%27s%20Point%20D4%20s%20001.jpg?itok=1LaK2R3-"], + "price": 474900, + "url": "https://www.remax-tresamigos-cr.com/property/mariner%E2%80%99s-point-d4" + }, { + "uid": "remax_property_10", + "name": "Monte Bello Lot 40", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Monte%20Bello%20Lot%2040%20s%20001.jpg?itok=G3RSyOXZ"], + "price": 475000, + "url": "https://www.remax-tresamigos-cr.com/property/monte-bello-lot-40" + }, { + "uid": "remax_property_11", + "name": "Casa del Papagayo", + "location": { + "name": "Playa Panama", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Casa%20del%20Papagayo%20001.jpg?itok=qddoNZlZ"], + "price": 479000, + "url": "https://www.remax-tresamigos-cr.com/property/casa-del-papagayo" + }, { + "uid": "remax_property_12", + "name": "Graceland Costa Rica", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Jailhouse%20Rock%20%202_0.jpg?itok=bYGOqsFW"], + "price": 485000, + "url": "https://www.remax-tresamigos-cr.com/property/graceland-costa-rica" + }, { + "uid": "remax_property_13", + "name": "Bay Point 9 Just reduced See Video", + "location": { + "name": "Playa Panama", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/1_3.jpg?itok=zbErG9cn"], + "price": 485000, + "url": "https://www.remax-tresamigos-cr.com/property/bay-point-9-just-reduced-see-video" + }, { + "uid": "remax_property_14", + "name": "Villa Tranquila – Vista Ridge G&CC", + "location": { + "name": null, + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Villa%20Tranquila%2045.jpg?itok=UBNiE-Fi"], + "price": 485000, + "url": "https://www.remax-tresamigos-cr.com/property/villa-tranquila-%E2%80%93-vista-ridge-gcc" + }, { + "uid": "remax_property_15", + "name": "Mariner's Point A2", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Dining.jpg?itok=a42Y7gJq"], + "price": 485000, + "url": "https://www.remax-tresamigos-cr.com/property/mariners-point-a2" + }, { + "uid": "remax_property_16", + "name": "Casa Guanacaste", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Casa%20Guanacaste%20001.jpg?itok=fB0Iq8Q5"], + "price": 495000, + "url": "https://www.remax-tresamigos-cr.com/property/casa-guanacaste" + }, { + "uid": "remax_property_17", + "name": "Corona del Mar Ocean View condo B7", + "location": { + "name": "Playa Ocotal", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/1948_182_CoronaDelMarHR-36-min.JPG?itok=x5QiuiH4"], + "price": 495000, + "url": "https://www.remax-tresamigos-cr.com/property/corona-del-mar-ocean-view-condo-b7" + }, { + "uid": "remax_property_18", + "name": "Bahia Pez Vela 34", + "location": { + "name": "Playa Ocotal", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Bahia%20Pez%20Vela%2034%20001.jpg?itok=nHVKFja6"], + "price": 499000, + "url": "https://www.remax-tresamigos-cr.com/property/bahia-pez-vela-34" + }, { + "uid": "remax_property_19", + "name": "Villa Calypso Vistas Del Pacifico Just Reduced!", + "location": { + "name": "Playa Panama", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Outdoor%20Area%202.jpg?itok=yMblMUBU"], + "price": 499000, + "url": "https://www.remax-tresamigos-cr.com/property/villa-calypso-vistas-del-pacifico-just-reduced" + }, { + "uid": "remax_property_20", + "name": "Finca Vainilla Development Property", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/115_IMG_0105.JPG?itok=Nvm0sHm6"], + "price": 500000, + "url": "https://www.remax-tresamigos-cr.com/property/finca-vainilla-development-property" + }, { + "uid": "remax_property_21", + "name": "Casa Ali – Vista Ridge Golf Club", + "location": { + "name": null, + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/CasaAli-43.jpg?itok=9zElc7XE"], + "price": 510000, + "url": "https://www.remax-tresamigos-cr.com/property/casa-ali-%E2%80%93-vista-ridge-golf-club" + }, { + "uid": "remax_property_22", + "name": "Vista Del Pacifico Custom Home", + "location": { + "name": "Playa Panama", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/001.jpg?itok=iaxqmnYe"], + "price": 524000, + "url": "https://www.remax-tresamigos-cr.com/property/vista-del-pacifico-custom-home" + }, { + "uid": "remax_property_23", + "name": "Hermosa del Mar 1-6A", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/HermosadelMar16A-54.jpg?itok=xGC0fzXM"], + "price": 525000, + "url": "https://www.remax-tresamigos-cr.com/property/hermosa-del-mar-1-6a" + }, { + "uid": "remax_property_24", + "name": "Casa Ocotal Serenity", + "location": { + "name": "Playa Ocotal", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/1880_245_10-min.JPG?itok=otCfdJsB"], + "price": 525000, + "url": "https://www.remax-tresamigos-cr.com/property/casa-ocotal-serenity" + }, { + "uid": "remax_property_25", + "name": "Pacifico Lot 119 House", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20Lot%20119%20House%20001.jpg?itok=Xt05qR8W"], + "price": 540000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-lot-119-house" + }, { + "uid": "remax_property_26", + "name": "Pacifico Lot 116 Casa Jardin", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20Lot%20116%20Casa%20Jardin%20s%20001.jpg?itok=MlQ5HXyw"], + "price": 549000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-lot-116-casa-jardin" + }, { + "uid": "remax_property_27", + "name": "Haras Del Mar Equestrian Center", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/DSC_2067%20%281%29.jpg?itok=SsVaRvfU"], + "price": 549000, + "url": "https://www.remax-tresamigos-cr.com/property/haras-del-mar-equestrian-center" + }, { + "uid": "remax_property_28", + "name": "La Mariposa Escondida", + "location": { + "name": null, + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/192_Snapshot%201%20%282-22-2015%209-22%20AM%29.JPG?itok=sai-uj04"], + "price": 549000, + "url": "https://www.remax-tresamigos-cr.com/property/la-mariposa-escondida" + }, { + "uid": "remax_property_29", + "name": "Villa Cuervo Vistas del Pacifico", + "location": { + "name": "Playa Panama", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Villa%20Cuervo%20VDP%20001.jpg?itok=4ImC3uF5"], + "price": 549000, + "url": "https://www.remax-tresamigos-cr.com/property/villa-cuervo-vistas-del-pacifico" + }, { + "uid": "remax_property_30", + "name": "Sol y Mar 3B", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/1837_75_SolYMar3BLR-3.JPG?itok=8LuRnqBd"], + "price": 565000, + "url": "https://www.remax-tresamigos-cr.com/property/sol-y-mar-3b" + }, { + "uid": "remax_property_31", + "name": "Villa Buena Vista Playa Ocotal", + "location": { + "name": "Playa Ocotal", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Cliffside%205%20-%20Copy.jpg?itok=kV_LzgRL"], + "price": 565000, + "url": "https://www.remax-tresamigos-cr.com/property/villa-buena-vista-playa-ocotal" + }, { + "uid": "remax_property_32", + "name": "Sol y Mar 3A", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/solymar%203a%201.jpg?itok=4rGAB-hq"], + "price": 575000, + "url": "https://www.remax-tresamigos-cr.com/property/sol-y-mar-3a" + }, { + "uid": "remax_property_33", + "name": "Bay Point Condo 7 See the video", + "location": { + "name": "Playa Panama", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Baypoint%207%20small%20002.jpg?itok=I26G0-L3"], + "price": 575000, + "url": "https://www.remax-tresamigos-cr.com/property/bay-point-condo-7-see-video" + }, { + "uid": "remax_property_34", + "name": "Villa Las Brisas Cacique", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Cacique%20View%201.jpg?itok=IQRylOPV"], + "price": 595000, + "url": "https://www.remax-tresamigos-cr.com/property/villa-las-brisas-cacique" + }, { + "uid": "remax_property_35", + "name": "Casa Delfines", + "location": { + "name": "Playa Panama", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Casa%20Delfin-1.jpg?itok=65sWDe_3"], + "price": 595000, + "url": "https://www.remax-tresamigos-cr.com/property/casa-delfines" + }, { + "uid": "remax_property_36", + "name": "Pacifico Lot 120 Sanctuary House", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20Lot%20120%20Sanctuary%20House%20%20002.jpg?itok=aZWnqi9s"], + "price": 599000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-lot-120-sanctuary-house" + }, { + "uid": "remax_property_37", + "name": "Monte Bello Casa Buena Vista", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Monte%20Bello%20Casa%20Buena%20Vista%20001.jpg?itok=ZnXirotc"], + "price": 599000, + "url": "https://www.remax-tresamigos-cr.com/property/monte-bello-casa-buena-vista" + }, { + "uid": "remax_property_38", + "name": "Villa Serena Pacifico Lot 89", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20Lot%2089%20Casa%20Serena%20s%20001.jpg?itok=m93WTzvg"], + "price": 599000, + "url": "https://www.remax-tresamigos-cr.com/property/villa-serena-pacifico-lot-89" + }, { + "uid": "remax_property_39", + "name": "Coco Downtown Commercial Lot", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Coco%20Downtown%20Commercial%20Lot%20next%20to%20Coco%20Beach%20Hotel%20s%20021.jpg?itok=AlKrODiO"], + "price": 600000, + "url": "https://www.remax-tresamigos-cr.com/property/coco-downtown-commercial-lot-0" + }, { + "uid": "remax_property_40", + "name": "Casa 92 Pacifico", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/1%20-%20Pacifico%20Casa%2092%20YT.jpg?itok=GCANMgXz"], + "price": 609000, + "url": "https://www.remax-tresamigos-cr.com/property/casa-92-pacifico" + }, { + "uid": "remax_property_41", + "name": "Casa Magee Laguna Vista", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Casa%20Magee%20Laguna%20Vista%20s%20001.jpg?itok=YqBfS_07"], + "price": 619000, + "url": "https://www.remax-tresamigos-cr.com/property/casa-magee-laguna-vista" + }, { + "uid": "remax_property_42", + "name": "Sol Y Mar 3C - Live on the Beach in Playa Hermosa", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Sol%20y%20Mar-8.jpg?itok=gwOEH60o"], + "price": 620000, + "url": "https://www.remax-tresamigos-cr.com/property/sol-y-mar-3c-live-beach-playa-hermosa" + }, { + "uid": "remax_property_43", + "name": "Villa las Nubes", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Hermosa%20Heights%20Lot%2070%20House%20s%20001.jpg?itok=7Ifqz5vB"], + "price": 649000, + "url": "https://www.remax-tresamigos-cr.com/property/villa-las-nubes" + }, { + "uid": "remax_property_44", + "name": "Apartment Bolimar", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/102_DSCN3873.JPG?itok=S6rIK3jY"], + "price": 675000, + "url": "https://www.remax-tresamigos-cr.com/property/apartment-bolimar" + }, { + "uid": "remax_property_0", + "name": "Casa Del Encanto Hermosa Heights Lot 41", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Hermosa%20Heights%20Lot%2041%20Casa%20del%20Encanto%20001.jpg?itok=yyQ8LXTf"], + "price": 675000, + "url": "https://www.remax-tresamigos-cr.com/property/casa-del-encanto-hermosa-heights-lot-41" + }, { + "uid": "remax_property_1", + "name": "Villa Romy", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Villa%20Romy%201.jpg?itok=jcrk1nuv"], + "price": 690000, + "url": "https://www.remax-tresamigos-cr.com/property/villa-romy" + }, { + "uid": "remax_property_2", + "name": "Mariners Point C1", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Mariner%27s%20Point%20C1%20small%20001.jpg?itok=mDQd2WYs"], + "price": 695000, + "url": "https://www.remax-tresamigos-cr.com/property/mariners-point-c1" + }, { + "uid": "remax_property_3", + "name": "Villa Vista Matapalo", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/1_0.jpg?itok=Wz9WNO1w"], + "price": 695000, + "url": "https://www.remax-tresamigos-cr.com/property/villa-vista-matapalo" + }, { + "uid": "remax_property_4", + "name": "Hermosa Del Mar Penthouse 2-7B", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Hermosa%20Del%20Mar-4.jpg?itok=rJF8YMIK"], + "price": 699000, + "url": "https://www.remax-tresamigos-cr.com/property/hermosa-del-mar-penthouse-2-7b" + }, { + "uid": "remax_property_5", + "name": "Mar Vista Lot 17 Spec Home", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Marvista%20Lot%2017%20Spec%20House%20001.jpg?itok=RxA0a0rX"], + "price": 699000, + "url": "https://www.remax-tresamigos-cr.com/property/mar-vista-lot-17-spec-home" + }, { + "uid": "remax_property_6", + "name": "Vista Cacique", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Vista%20Cacique%20Aerial%20s%20001.jpg?itok=b06JGN51"], + "price": 699000, + "url": "https://www.remax-tresamigos-cr.com/property/vista-cacique" + }, { + "uid": "remax_property_7", + "name": "Pacifico Lot 114", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20Lot%20114%20House%20s%20001_0.jpg?itok=bzU-GLTK"], + "price": 739000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-lot-114" + }, { + "uid": "remax_property_8", + "name": "Pacifico Lot 90 House", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20Lot%2090%20House%20001.jpg?itok=HZzMTx_i"], + "price": 740000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-lot-90-house" + }, { + "uid": "remax_property_9", + "name": "Casa Mango Dulce", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Casa%20Mango%20Dulce%20FB%20.png?itok=k5JedKZw"], + "price": 749000, + "url": "https://www.remax-tresamigos-cr.com/property/casa-mango-dulce" + }, { + "uid": "remax_property_10", + "name": "Villa Las Brisas Vistas del Pacifico", + "location": { + "name": "Playa Panama", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Villa%20Las%20Brisas%20Vistas%20del%20Pacifico%20s%20001.jpg?itok=qxj7L3fx"], + "price": 749000, + "url": "https://www.remax-tresamigos-cr.com/property/villa-las-brisas-vistas-del-pacifico" + }, { + "uid": "remax_property_11", + "name": "Casa Oso Grande", + "location": { + "name": "Playa Panama", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Casa%20Oso%20Grande%20Vistas%20del%20Pacifico%20s%20125.jpg?itok=Yd2nIAcQ"], + "price": 749000, + "url": "https://www.remax-tresamigos-cr.com/property/casa-oso-grande" + }, { + "uid": "remax_property_12", + "name": "Villa Tranquilidad a Altas Vistas", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Hastie-2-min.jpg?itok=GZVIFQ8p"], + "price": 749000, + "url": "https://www.remax-tresamigos-cr.com/property/villa-tranquilidad-altas-vistas" + }, { + "uid": "remax_property_13", + "name": "Casa Gerda 4 bed Ocean View Villa", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/2016-07-27_15-46-53.jpg?itok=uFh7stch"], + "price": 750000, + "url": "https://www.remax-tresamigos-cr.com/property/casa-gerda-4-bed-ocean-view-villa" + }, { + "uid": "remax_property_14", + "name": "Las Trancas Development", + "location": { + "name": "Papagayo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/185_Picture6.JPG?itok=AChdGr_G"], + "price": 750000, + "url": "https://www.remax-tresamigos-cr.com/property/las-trancas-development" + }, { + "uid": "remax_property_15", + "name": "Hotel Luna de Mata de Limón", + "location": { + "name": null, + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/22406034_2058438384403627_1647842975819599984_n.jpg?itok=TwoB4jnM"], + "price": 750000, + "url": "https://www.remax-tresamigos-cr.com/property/hotel-luna-de-mata-de-lim%C3%B3n" + }, { + "uid": "remax_property_16", + "name": "Hotel Luna", + "location": { + "name": null, + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/default_images/noimage.gif?itok=ylryoEGs"], + "price": 750000, + "url": "https://www.remax-tresamigos-cr.com/property/hotel-luna" + }, { + "uid": "remax_property_17", + "name": "Lomas Del Mar PG 3 Development Lot", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/1797_185_4.JPG?itok=FjUWt41v"], + "price": 755000, + "url": "https://www.remax-tresamigos-cr.com/property/lomas-del-mar-pg-3-development-lot" + }, { + "uid": "remax_property_18", + "name": "Lighthouse Monte Paraiso SEE VIDEO", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Lighthouse%20Monteparaiso%20small%20001.jpg?itok=D_MZOuMv"], + "price": 785000, + "url": "https://www.remax-tresamigos-cr.com/property/lighthouse-monte-paraiso-see-video" + }, { + "uid": "remax_property_19", + "name": "Self-Storage Business", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Mini%20Storage-11.jpg?itok=gtiM7MDh"], + "price": 785000, + "url": "https://www.remax-tresamigos-cr.com/property/self-storage-business" + }, { + "uid": "remax_property_20", + "name": "Villa Vargas", + "location": { + "name": null, + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Vargas-10.jpg?itok=bjM_ynQO"], + "price": 795000, + "url": "https://www.remax-tresamigos-cr.com/property/villa-vargas" + }, { + "uid": "remax_property_21", + "name": "Villa Azure Ocotal", + "location": { + "name": "Playa Ocotal", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Villa%20Azure%20Ocotal%20s%20001.jpg?itok=ajl6gTTI"], + "price": 795000, + "url": "https://www.remax-tresamigos-cr.com/property/villa-azure-ocotal" + }, { + "uid": "remax_property_22", + "name": "Villa Paradiso del Mar - Playa Hermosa Beach House Costa Rica", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Villa%20Paradiso%20del%20Mar%20Monte%20Paraiso%20s%20001.jpg?itok=ggKdECE9"], + "price": 799000, + "url": "https://www.remax-tresamigos-cr.com/property/villa-paradiso-del-mar-playa-hermosa-beach-house-costa-rica" + }, { + "uid": "remax_property_23", + "name": "Villa Encanta, Playa Del Coco", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/3f50478e-8ace-436b-ba06-9cc0f4433046.JPG?itok=5q7LIfTH"], + "price": 800000, + "url": "https://www.remax-tresamigos-cr.com/property/villa-encanta-playa-del-coco" + }, { + "uid": "remax_property_24", + "name": "Casa Bella Mia", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/004%20-%20Ladera%2019.jpg?itok=Jo2sy2zm"], + "price": 820000, + "url": "https://www.remax-tresamigos-cr.com/property/casa-bella-mia" + }, { + "uid": "remax_property_25", + "name": "Pacifico Villa Lot 6", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/1%20-%20Pac%20Lot%206%20%233%20compressed.jpg?itok=MDgabq63"], + "price": 839000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-villa-lot-6" + }, { + "uid": "remax_property_26", + "name": "Casa Buena Vista Cacique", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Casa%20Buena%20Vista%20Cacique%20s%20001.jpg?itok=MQf5tWvd"], + "price": 840000, + "url": "https://www.remax-tresamigos-cr.com/property/casa-buena-vista-cacique" + }, { + "uid": "remax_property_27", + "name": "Monte Bello Lot 12", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Monte%20Bello%20Lot%2012%20Spec%20House%20001.jpg?itok=DBid0RpQ"], + "price": 849000, + "url": "https://www.remax-tresamigos-cr.com/property/monte-bello-lot-12" + }, { + "uid": "remax_property_28", + "name": "Ventanas de Dios (God's Windows)", + "location": { + "name": null, + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/IMG_0835_0.JPG?itok=rrltFmso"], + "price": 849000, + "url": "https://www.remax-tresamigos-cr.com/property/ventanas-de-dios-gods-windows" + }, { + "uid": "remax_property_29", + "name": "Pacifico Lot 88 Spec House", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20Lot%208%20Spec%20House%20001.jpg?itok=8_BTkoOY"], + "price": 849000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-lot-88-spec-house" + }, { + "uid": "remax_property_30", + "name": "Casa Puesta del Sol Palo Alto 15", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Palo%20Alto%20Lot%2015%20Casa%20Puesta%20del%20Sol%20s%20001.jpg?itok=J-OvicM1"], + "price": 850000, + "url": "https://www.remax-tresamigos-cr.com/property/casa-puesta-del-sol-palo-alto-15" + }, { + "uid": "remax_property_31", + "name": "Pacifico Lot 8 Spec House", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20Lot%208%20Spec%20Home%20001.jpg?itok=0I9EqvbD"], + "price": 850000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-lot-8-spec-house" + }, { + "uid": "remax_property_32", + "name": "Papagayo Rumy Lot", + "location": { + "name": "Playa Panama", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/1949_92_Papagayo%20Lot%202-min.JPG?itok=FBCaS8MG"], + "price": 850000, + "url": "https://www.remax-tresamigos-cr.com/property/papagayo-rumy-lot" + }, { + "uid": "remax_property_33", + "name": "Casa Amarilla", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Casa%20Monica%20Drone%20shot%201.jpg?itok=rw6r3FhQ"], + "price": 875000, + "url": "https://www.remax-tresamigos-cr.com/property/casa-amarilla" + }, { + "uid": "remax_property_34", + "name": "Cactus Heights 3 bed Ocean View Villa", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/1_11.jpg?itok=KD6LCUV0"], + "price": 889000, + "url": "https://www.remax-tresamigos-cr.com/property/cactus-heights-3-bed-ocean-view-villa" + }, { + "uid": "remax_property_35", + "name": "Hermosa Montana Lot 1", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/159_DSC02447.JPG?itok=IBkMOHOD"], + "price": 899000, + "url": "https://www.remax-tresamigos-cr.com/property/hermosa-montana-lot-1" + }, { + "uid": "remax_property_36", + "name": "Pacifico Lot 110 Villa Sirena", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20Lot%20110%20Villa%20Sirena%20s%20001.jpg?itok=K19d0xvv"], + "price": 925000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-lot-110-villa-sirena" + }, { + "uid": "remax_property_37", + "name": "Cacique Lot 113 House", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Cacique%20Lot%20113%20House%20s%20001.jpg?itok=_rZ4TBW5"], + "price": 925000, + "url": "https://www.remax-tresamigos-cr.com/property/cacique-lot-113-house" + }, { + "uid": "remax_property_38", + "name": "Rancho Rio Blanco - PRICE REDUCED BY 50%", + "location": { + "name": null, + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/109_Rio%20Blanco%202.JPG?itok=13ulj8xR"], + "price": 949000, + "url": "https://www.remax-tresamigos-cr.com/property/rancho-rio-blanco-price-reduced-50" + }, { + "uid": "remax_property_39", + "name": "73 HECTARE FARM", + "location": { + "name": null, + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/2016-06-16_13-11-59.jpg?itok=1wjmUIqM"], + "price": 949000, + "url": "https://www.remax-tresamigos-cr.com/property/73-hectare-farm" + }, { + "uid": "remax_property_40", + "name": "Commercial Property on Main Street", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/CCP-20.jpg?itok=FGGZW43Z"], + "price": 950000, + "url": "https://www.remax-tresamigos-cr.com/property/commercial-property-main-street" + }, { + "uid": "remax_property_41", + "name": "Commercial Building Bar And Restaurant in Playa Hermosa Click to...", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/136_Sand%20Bar%20resize%203.JPG?itok=2G6xd7N2"], + "price": 990000, + "url": "https://www.remax-tresamigos-cr.com/property/commercial-building-bar-and-restaurant-playa-hermosa-click-see-video-just-reduced" + }, { + "uid": "remax_property_42", + "name": "Pacifico Lot 80 House", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20Lot%2080%20House%20Furnished%20s%20001.jpg?itok=StyXK542"], + "price": 995000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-lot-80-house" + }, { + "uid": "remax_property_43", + "name": "Pacifico Lot 77 Casa Exotica", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20Lot%2077%20House%20s%20001.jpg?itok=PYSQhdK1"], + "price": 995000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-lot-77-casa-exotica" + }, { + "uid": "remax_property_44", + "name": "Casa Roco del Mar", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20Lot%2078%20Casa%20Roco%20del%20Mar%20s%20001.jpg?itok=gJMnr6Wy"], + "price": 998000, + "url": "https://www.remax-tresamigos-cr.com/property/casa-roco-del-mar" + }, { + "uid": "remax_property_0", + "name": "Pacifico Lot 53 Spec House", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20Lot%2053%20Spec%20House%20001.jpg?itok=kyHF6Y2X"], + "price": 1249000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-lot-53-spec-house" + }, { + "uid": "remax_property_1", + "name": "Villa Cocobolo Monte Bell", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Villa%20Cocobolo%20Lot%2032%20s%20001.jpg?itok=yefoMEdW"], + "price": 1250000, + "url": "https://www.remax-tresamigos-cr.com/property/villa-cocobolo-monte-bell" + }, { + "uid": "remax_property_2", + "name": "Coco Vista Pacifico Lot 69", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20Lot%2069%20Coco%20Vista%20001.jpg?itok=e28dfQeO"], + "price": 1275000, + "url": "https://www.remax-tresamigos-cr.com/property/coco-vista-pacifico-lot-69" + }, { + "uid": "remax_property_3", + "name": "Vista Royal Playa Ocotal", + "location": { + "name": "Playa Ocotal", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/VistaRoyal-72.jpg?itok=K1735608"], + "price": 1290000, + "url": "https://www.remax-tresamigos-cr.com/property/vista-royal-playa-ocotal" + }, { + "uid": "remax_property_4", + "name": "Casa de los Sueños", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Sue%C3%B1os-10.jpg?itok=ziQaCmKk"], + "price": 1395000, + "url": "https://www.remax-tresamigos-cr.com/property/casa-de-los-sue%C3%B1os" + }, { + "uid": "remax_property_5", + "name": "Villa Mexican pacifico", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/1163900509.jpg?itok=AKUs7m6y"], + "price": 1395000, + "url": "https://www.remax-tresamigos-cr.com/property/villa-mexican-pacifico" + }, { + "uid": "remax_property_6", + "name": "Villa Avalone", + "location": { + "name": "Playa Panama", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Lamar%27s%20VDP%20-%201.jpg?itok=QzsJ2C47"], + "price": 1400000, + "url": "https://www.remax-tresamigos-cr.com/property/villa-avalone" + }, { + "uid": "remax_property_7", + "name": "Casa La Joya Bella", + "location": { + "name": "Playa Panama", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Casa%20La%20Bella%20Joya%20small%201.jpg?itok=eiihK27Y"], + "price": 1490000, + "url": "https://www.remax-tresamigos-cr.com/property/casa-la-joya-bella" + }, { + "uid": "remax_property_8", + "name": "Casa Hermosa Montaña", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Casa%20Hermosa%20Montana%20001.jpg?itok=LTSPgNAV"], + "price": 1495000, + "url": "https://www.remax-tresamigos-cr.com/property/casa-hermosa-monta%C3%B1a" + }, { + "uid": "remax_property_9", + "name": "Papagayo Luxurious Retreat", + "location": { + "name": "Playa Panama", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/1%20Papagayo%20Luxurious%20Retreat%20YT_0.jpg?itok=SGK5GUyH"], + "price": 1495000, + "url": "https://www.remax-tresamigos-cr.com/property/papagayo-luxurious-retreat" + }, { + "uid": "remax_property_10", + "name": "Hermosa Montana", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/17_DSC00639.JPG?itok=Tlr2-0Gu"], + "price": 1500000, + "url": "https://www.remax-tresamigos-cr.com/property/hermosa-montana" + }, { + "uid": "remax_property_11", + "name": "Reserva Papagayo Ocean View Development Parcel", + "location": { + "name": "Papagayo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/DSC_9180.jpg?itok=Yf46sK3x"], + "price": 1500000, + "url": "https://www.remax-tresamigos-cr.com/property/reserva-papagayo-ocean-view-development-parcel" + }, { + "uid": "remax_property_12", + "name": "Monkey Bar Development Lot SEE VIDEO", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/233_New%20Panoramic2%20web.JPG?itok=7j_-DTF7"], + "price": 1500000, + "url": "https://www.remax-tresamigos-cr.com/property/monkey-bar-development-lot-see-video" + }, { + "uid": "remax_property_13", + "name": "Architectural Masterpiece", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Architectural%20Masterpiece%20small%20001%20-%20Copy.jpg?itok=K2ELptVf"], + "price": 1595000, + "url": "https://www.remax-tresamigos-cr.com/property/architectural-masterpiece" + }, { + "uid": "remax_property_14", + "name": "Finca Santa Maria", + "location": { + "name": null, + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/finca%20santa%20maria%20resize%20007.jpg?itok=ldhKztS0"], + "price": 1600000, + "url": "https://www.remax-tresamigos-cr.com/property/finca-santa-maria" + }, { + "uid": "remax_property_15", + "name": "Arenal Beach in Panama the Country", + "location": { + "name": "Playa Panama", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/184_ArenalBeach.JPG?itok=LRN5lbz6"], + "price": 1680000, + "url": "https://www.remax-tresamigos-cr.com/property/arenal-beach-panama-country" + }, { + "uid": "remax_property_16", + "name": "Casa Pasmosa Monte Paraiso", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Casa%20Pasmosa%20s%20001.jpg?itok=NVEk0uQ8"], + "price": 1695000, + "url": "https://www.remax-tresamigos-cr.com/property/casa-pasmosa-monte-paraiso" + }, { + "uid": "remax_property_17", + "name": "Casa La Mar", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Casa%20La%20Mar%20resize%201.jpg?itok=2_SWAC0V"], + "price": 1778000, + "url": "https://www.remax-tresamigos-cr.com/property/casa-la-mar" + }, { + "uid": "remax_property_18", + "name": "Aguila del Mar", + "location": { + "name": "Playa Ocotal", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Aguila%20YT%20_0.jpg?itok=A08biILg"], + "price": 1780000, + "url": "https://www.remax-tresamigos-cr.com/property/aguila-del-mar" + }, { + "uid": "remax_property_19", + "name": "Villa RocMar", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Porte-coch%C3%A8re%201.jpg?itok=-rGuda3n"], + "price": 1795000, + "url": "https://www.remax-tresamigos-cr.com/property/villa-rocmar" + }, { + "uid": "remax_property_20", + "name": "Pacifico Tuscan Villa", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Pacifico%20Tuscan%20Villa%20small%20001.jpg?itok=dMWXcLn_"], + "price": 1895000, + "url": "https://www.remax-tresamigos-cr.com/property/pacifico-tuscan-villa" + }, { + "uid": "remax_property_21", + "name": "Corridor to Playa Hermosa and Playas Del Coco Development Parcel", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/141_SAM_4898.JPG?itok=4cruKnjS"], + "price": 1950000, + "url": "https://www.remax-tresamigos-cr.com/property/corridor-playa-hermosa-and-playas-del-coco-development-parcel" + }, { + "uid": "remax_property_22", + "name": "Lomas Mountain & Valley Development Parcel", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/142_1.JPG?itok=n8eYDWgU"], + "price": 2000000, + "url": "https://www.remax-tresamigos-cr.com/property/lomas-mountain-valley-development-parcel" + }, { + "uid": "remax_property_23", + "name": "Rincon de La Vieja Adventure Land", + "location": { + "name": null, + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/111_PC210016.JPG?itok=umYg5Dcv"], + "price": 2100000, + "url": "https://www.remax-tresamigos-cr.com/property/rincon-de-la-vieja-adventure-land" + }, { + "uid": "remax_property_24", + "name": "Canas Farm", + "location": { + "name": null, + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/timthumb.jpeg?itok=_zHJ-MMn"], + "price": 2200000, + "url": "https://www.remax-tresamigos-cr.com/property/canas-farm" + }, { + "uid": "remax_property_25", + "name": "Hacienda Del Mar Luxury Development View Lot 4 SEE VIDEO", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/19_HDM%20pic1%20web.JPG?itok=i6Hklbgp"], + "price": 2400000, + "url": "https://www.remax-tresamigos-cr.com/property/hacienda-del-mar-luxury-development-view-lot-4-see-video" + }, { + "uid": "remax_property_26", + "name": "Cactus Heights Luxury Villa", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/2015-10-26_13-48-59.jpg?itok=LU1Z352H"], + "price": 2499000, + "url": "https://www.remax-tresamigos-cr.com/property/cactus-heights-luxury-villa" + }, { + "uid": "remax_property_27", + "name": "Rio Canas Farm", + "location": { + "name": null, + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Drone%20Shot.png?itok=5yp6P0Gr"], + "price": 2500000, + "url": "https://www.remax-tresamigos-cr.com/property/rio-canas-farm" + }, { + "uid": "remax_property_28", + "name": "Restaurante Hotel Costa del Sol", + "location": { + "name": null, + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/IMG_0150.JPG?itok=F5_wjP7Y"], + "price": 2500000, + "url": "https://www.remax-tresamigos-cr.com/property/restaurante-hotel-costa-del-sol" + }, { + "uid": "remax_property_29", + "name": "Adventure Inn Hotel", + "location": { + "name": null, + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/home_hotel_front.jpg?itok=CzwVgCGu"], + "price": 2590000, + "url": "https://www.remax-tresamigos-cr.com/property/adventure-inn-hotel" + }, { + "uid": "remax_property_30", + "name": "Casa Aude", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/OR1%20FRONT.jpg?itok=liWV-xTk"], + "price": 2600000, + "url": "https://www.remax-tresamigos-cr.com/property/casa-aude" + }, { + "uid": "remax_property_31", + "name": "Colinas Papagayo at Hacienda Del Mar 13", + "location": { + "name": "Playa Panama", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/1931_229_2.JPG?itok=of-YqqPx"], + "price": 2600000, + "url": "https://www.remax-tresamigos-cr.com/property/colinas-papagayo-hacienda-del-mar-13" + }, { + "uid": "remax_property_32", + "name": "One Hectare ( 2.47 acres) Ocean View Commercial Lot SEE VIDEO", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/1_4.jpg?itok=jh9jTx0_"], + "price": 2695000, + "url": "https://www.remax-tresamigos-cr.com/property/one-hectare-247-acres-ocean-view-commercial-lot-see-video" + }, { + "uid": "remax_property_33", + "name": "Coco Village Ocean View Development Property", + "location": { + "name": "Playas del Coco", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Coco%20Development%20Property%20Satellite%201.jpg?itok=o8w403yx"], + "price": 2695000, + "url": "https://www.remax-tresamigos-cr.com/property/coco-village-ocean-view-development-property" + }, { + "uid": "remax_property_34", + "name": "Hacienda Del Mar Development Parcel 25", + "location": { + "name": "Playa Panama", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/2_1.jpg?itok=tDiqWKq2"], + "price": 2700000, + "url": "https://www.remax-tresamigos-cr.com/property/hacienda-del-mar-development-parcel-25" + }, { + "uid": "remax_property_35", + "name": "Los Gauchos Ranch", + "location": { + "name": null, + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Los%20Gauchos%20Ranch%20Thumbnail.jpg?itok=kTA4o7y8"], + "price": 3500000, + "url": "https://www.remax-tresamigos-cr.com/property/los-gauchos-ranch" + }, { + "uid": "remax_property_36", + "name": "Playa Hermosa Ocean View Development", + "location": { + "name": "Playa Hermosa", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/223_DSCF1408r.JPG?itok=e3fsZA6H"], + "price": 3900000, + "url": "https://www.remax-tresamigos-cr.com/property/playa-hermosa-ocean-view-development" + }, { + "uid": "remax_property_37", + "name": "Mango Papagayo Property", + "location": { + "name": "Papagayo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/14.jpg?itok=agF-usUZ"], + "price": 4885000, + "url": "https://www.remax-tresamigos-cr.com/property/mango-papagayo-property" + }, { + "uid": "remax_property_38", + "name": "Villa Durazno", + "location": { + "name": "Playa Panama", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/Michelle%20Casa%20001.JPG?itok=7O2Rk7xt"], + "price": 4950000, + "url": "https://www.remax-tresamigos-cr.com/property/villa-durazno" + }, { + "uid": "remax_property_39", + "name": "Playa Matapalo Development Parcel", + "location": { + "name": "Playa Matapalo", + "geo": null + }, + "images": ["https://www.remax-tresamigos-cr.com/sites/default/files/styles/large/public/images/215_Matapalo%20resize%20018.JPG?itok=OIDJ-QdH"], + "price": 14000000, + "url": "https://www.remax-tresamigos-cr.com/property/playa-matapalo-development-parcel" + }], + "type": "real_estate", + "name": ["Real Estate", "Property", "Properties"] +} \ No newline at end of file diff --git a/themes/humans-of-nosara/static/data/ves_graduate.json b/themes/humans-of-nosara/static/data/ves_graduate.json new file mode 100644 index 0000000..fda8bdc --- /dev/null +++ b/themes/humans-of-nosara/static/data/ves_graduate.json @@ -0,0 +1 @@ +{"data":[{"uid":"ves_graduate_0","name":"Diego Lopez Matarrita","image":"https://d33wubrfki0l68.cloudfront.net/3a0b20d24fc7806faac93a670780030777bb7687/738a3/uploads/2018/05/01/diego-lopez-matarrita.jpg","location":{"name":"Nosara","geo":null},"phone":"(506) 8662-4660","email":null},{"uid":"ves_graduate_1","name":"Alicia Artavia","image":"https://d33wubrfki0l68.cloudfront.net/fa3fc2599103f12e9b53f46548bc402eecef4608/cf5b8/uploads/2018/04/28/alicia-artavia-avatar.jpg","location":{"name":"Nosara","geo":null},"phone":"(506) 2682-0930","email":null},{"uid":"ves_graduate_2","name":"Sonia Córdoba Porras","image":"https://d33wubrfki0l68.cloudfront.net/0a0145593baa637815336bce55811bbd9ea0ac21/82884/uploads/2018/04/28/sonia-cordoba-porras.jpg","location":{"name":"Nosara","geo":null},"phone":"(506) 2682-0371","email":null},{"uid":"ves_graduate_3","name":"Iris Jiron Castillo","image":"https://d33wubrfki0l68.cloudfront.net/1f66b51721cc8577bacf8aa9fb81e05a13667ba6/3ebfe/uploads/2018/04/28/iris-jiron-castillo.jpg","location":{"name":"Nosara","geo":null},"phone":"(506) 8539-1974","email":null},{"uid":"ves_graduate_4","name":"Pilar Montiel Noguera","image":"https://d33wubrfki0l68.cloudfront.net/4604f7d23af206210ec1b2f41d2ceaa2a77bbe6e/c1d06/uploads/2018/04/28/pilar-montiel-noguera.jpg","location":{"name":"Nosara","geo":null},"phone":"(506) 8968-1736","email":null},{"uid":"ves_graduate_5","name":"Ruth Juarez Cordoba","image":"https://d33wubrfki0l68.cloudfront.net/8358c792e86ed0292f6d38a3bb5616d2d2c7410a/306e7/uploads/2018/04/28/ruth-juarez-cordoba.jpg","location":{"name":"Nosara","geo":null},"phone":"(506) 2682-0371","email":null},{"uid":"ves_graduate_6","name":"Sara Baltodano Lopez","image":"https://d33wubrfki0l68.cloudfront.net/5318b6706e1c2e27e75a416ae7da49de32188fde/95b94/uploads/2018/04/28/sara-baltodano-lopez.jpg","location":{"name":"Nosara","geo":null},"phone":"(506) 7151-2656","email":null},{"uid":"ves_graduate_7","name":"Eraida Diaz","image":"https://d33wubrfki0l68.cloudfront.net/50b69c2eb201163e9d9b80a61cbbcc881e1ebf3a/53276/uploads/2018/05/01/eraida-diaz.jpg","location":{"name":"Nosara","geo":null},"phone":"(506) 8667-4044","email":null},{"uid":"ves_graduate_8","name":"José Matamoros","image":"https://d33wubrfki0l68.cloudfront.net/944b5d864e0aa038cf3076bf09164134c9b44ab7/e010f/uploads/2018/05/01/jose-matamoros.jpg","location":{"name":"Nosara","geo":null},"phone":"(506) 8398-2415","email":null},{"uid":"ves_graduate_9","name":"Maria Zuñiga Diaz","image":"https://d33wubrfki0l68.cloudfront.net/5943780e1791fb45d6f3cfbe88a0ef0c8ed84793/15fa1/uploads/2018/05/01/maria-zuniga-diaz.jpg","location":{"name":"Nosara","geo":null},"phone":"(506) 8870-6414","email":null},{"uid":"ves_graduate_10","name":"Jeannette Vargas Ramirez","image":"https://d33wubrfki0l68.cloudfront.net/8728343fa11610e6cdd17158e430a145f99444a4/5204d/uploads/2018/05/01/jeanette-vargas-ramirez.jpg","location":{"name":"Nosara","geo":null},"phone":"(506) 8840-8392","email":null},{"uid":"ves_graduate_11","name":"Maria Jesus Villagra Quiros","image":"https://d33wubrfki0l68.cloudfront.net/0f47e4d757acf5edaf94feb5e62e57ba457596a8/71aea/uploads/2018/05/01/maria-jesus-villagra-quiros.jpg","location":{"name":"Nosara","geo":null},"phone":"(506) 2682-0216","email":null},{"uid":"ves_graduate_12","name":"Arianna Rivera Avilés","image":"https://d33wubrfki0l68.cloudfront.net/7e83725bfb90a91ba2a0a568c5a23f149e41a978/3f28c/uploads/2018/05/01/arianna-rivera-aviles.jpg","location":{"name":"Nosara","geo":null},"phone":"(506) 8674-3627","email":null},{"uid":"ves_graduate_13","name":"Heiner Díaz Matarrita","image":"https://d33wubrfki0l68.cloudfront.net/de2cbd6a486208f738ef9a4d5a4f916e77a1d192/4f622/uploads/2018/05/01/heiner-diaz-matarrita.jpg","location":{"name":"Nosara","geo":null},"phone":"(506) 8357-0903","email":null},{"uid":"ves_graduate_14","name":"Luis Diego Pérez Jirón","image":"https://d33wubrfki0l68.cloudfront.net/03989a50e871a4647cf3ef3a38d01600b6b279f1/67bf8/uploads/2018/05/01/luis-diego-perez-jiron.jpg","location":{"name":"Nosara","geo":null},"phone":"(506) 8550-5438","email":null},{"uid":"ves_graduate_15","name":"Heidi Cordero Castillo","image":"https://d33wubrfki0l68.cloudfront.net/2db5133da0b26c036386b4b35c6d5e559fd762b0/59aeb/uploads/2018/05/01/heidi-cordero-castillo.jpg","location":{"name":"Nosara","geo":null},"phone":"(506) 8550-7622","email":null},{"uid":"ves_graduate_16","name":"Ivan Varela Chavarria","image":"https://d33wubrfki0l68.cloudfront.net/dda8b413ddb14da6b62188985f505b4098971659/7446e/uploads/2018/05/01/ivan-varela-chavarria.jpg","location":{"name":"Nosara","geo":null},"phone":"(506) 8864-1532","email":null},{"uid":"ves_graduate_17","name":"Erika Rojas Cambronero","image":"https://d33wubrfki0l68.cloudfront.net/71b2c9f6efbf923d353f90a77498812230df3a6d/7355d/uploads/2018/05/01/erika-rojas-cambronero.jpg","location":{"name":"Nosara","geo":null},"phone":"(506) 8599-3193","email":null},{"uid":"ves_graduate_18","name":"Giovanni Acedo","image":"https://d33wubrfki0l68.cloudfront.net/4c85e590e609094829d27adde80917608795d50c/1f582/uploads/2018/05/01/giovanni-acedo.jpg","location":{"name":"Nosara","geo":null},"phone":"(506) 8551-1093","email":null},{"uid":"ves_graduate_19","name":"Maria Fernanda Alvarado Arrieta","image":"https://d33wubrfki0l68.cloudfront.net/3b66ef3ae1b7128d2adc171c56ee6ff01834d2b4/00dbd/uploads/2018/05/01/maria-fernanda-alvarado-arrieta.jpg","location":{"name":"Nosara","geo":null},"phone":"(506) 8688-1577","email":null},{"uid":"ves_graduate_20","name":"Magda Dailey","image":"https://d33wubrfki0l68.cloudfront.net/59a032f6f964a8db68f466a10dd3d4e92e67bd1a/1340f/uploads/2018/05/01/magda-dailey.jpg","location":{"name":"Nosara","geo":null},"phone":"(506) 8849-5270","email":null},{"uid":"ves_graduate_21","name":"Graciela Lopez Alfaro","image":"https://d33wubrfki0l68.cloudfront.net/2a43c5685add8bb34d0a30e849fe1d81849db812/73c08/uploads/2018/04/06/la-cocina-de-graci-face.jpg","location":{"name":"Nosara","geo":null},"phone":"(506) 8405-2446","email":null},{"uid":"ves_graduate_22","name":"Warren Arrieta Juarez","image":"https://d33wubrfki0l68.cloudfront.net/e485f2c97271fbc07afd509865b9a400969650e0/ca524/uploads/2018/04/06/warren.jpg","location":{"name":"Nosara","geo":null},"phone":"(506) 8535-5313","email":null},{"uid":"ves_graduate_23","name":"Alexandra Perez Avila","image":"https://d33wubrfki0l68.cloudfront.net/21c146091335ea3148173feab6bc0008dfd061b8/5dbf4/uploads/2018/04/06/mini-super-y-licorera-nosara-centro-face.jpg","location":{"name":"Nosara","geo":null},"phone":"(506) 8362-1025","email":null},{"uid":"ves_graduate_24","name":"Ines Guadalupe Rosales Lopez","image":"https://d33wubrfki0l68.cloudfront.net/805f66dcc9cb6065408f7b571d9564599f328dd1/998de/uploads/2018/04/06/queques-y-reposteria-nosara-face.jpg","location":{"name":"Nosara","geo":null},"phone":"(506) 8516-6069","email":null},{"uid":"ves_graduate_25","name":"Isidora Rojas Cambronero","image":"https://d33wubrfki0l68.cloudfront.net/ac05a896deffdbb7c83f9dc43a3a478a59bfc6ea/c56a4/uploads/2018/04/06/la-casa-de-la-agua-y-el-hilo-face.jpg","location":{"name":"Nosara","geo":null},"phone":"(506) 8893-1450","email":null},{"uid":"ves_graduate_26","name":"Leda Patricia Matarrita Arroya","image":"https://d33wubrfki0l68.cloudfront.net/7a3a27be4fe8049b7326bae4e267db2c5f78c7b4/60657/uploads/2018/04/06/color-violeta-face.jpg","location":{"name":"Nosara","geo":null},"phone":"(506) 6081-5941","email":null},{"uid":"ves_graduate_27","name":"Yohana Beteta Navarez","image":"https://d33wubrfki0l68.cloudfront.net/71530a76f3ea161ea18ce3426c677d4663309063/07da7/uploads/2018/04/06/y-and-b-1.jpg","location":{"name":"Nosara","geo":null},"phone":"(506) 8544-5859","email":null},{"uid":"ves_graduate_28","name":"Virginia Alfaro Cordero","image":"https://d33wubrfki0l68.cloudfront.net/bcd05b5f21a95dbbcd136e325bd1e72ac57df6b4/51113/uploads/2018/04/06/telas-y-tijeras-nosara-face.jpg","location":{"name":"Nosara","geo":null},"phone":"(506) 8627-9136","email":null},{"uid":"ves_graduate_29","name":"Saray Zeledon Rojas","image":"https://d33wubrfki0l68.cloudfront.net/e3c8c8ab1aa8cf097bcd1f4b2f237f466f883283/f5e06/uploads/2018/04/06/soda-monchas-face.jpg","location":{"name":"Nosara","geo":null},"phone":"(506) 8789-3844","email":null},{"uid":"ves_graduate_30","name":"Ronald Campos Baltodano","image":"https://d33wubrfki0l68.cloudfront.net/145dc90d1205585c0d4e1dc11b91dd5a1cf7fb85/b6f86/uploads/2018/04/06/ronal-chorotega-sushi-face.jpg","location":{"name":"Nosara","geo":null},"phone":"(506) 8607-3804","email":null},{"uid":"ves_graduate_31","name":"Adilsa Fajardo Carrillo","image":"https://d33wubrfki0l68.cloudfront.net/9bf49d27259c9936f037d4bc570c846c4c9b2d3f/dcb66/uploads/2018/04/06/dianthus-cevicheria-creole-food-face.jpg","location":{"name":"Nosara","geo":null},"phone":"(506) 8501-0749","email":null},{"uid":"ves_graduate_32","name":"Yohan Mendez Ruiz","image":"https://d33wubrfki0l68.cloudfront.net/8b023bb11764c73f7c5de3daf38e71a9aefdc4e2/06b47/uploads/2018/04/06/ukelele-surf.jpg","location":{"name":"Nosara","geo":null},"phone":"(506) 8663-5552","email":null},{"uid":"ves_graduate_33","name":"Shirley Rojas Lopez","image":"https://d33wubrfki0l68.cloudfront.net/c9cbdf75855b7138519cccb6561c02bf6cb94a03/772a6/uploads/2018/04/06/banana-bread-nosara-face.jpg","location":{"name":"Nosara","geo":null},"phone":"(506) 8784-5516","email":null},{"uid":"ves_graduate_34","name":"Marley Obando","image":"https://d33wubrfki0l68.cloudfront.net/fee71a3298aa8735202d3631ef9ab4e80da0baab/ab62b/uploads/2018/04/06/productos-de-limpieza-marley-face.jpg","location":{"name":"Nosara","geo":null},"phone":"(506) 8671-6566","email":null},{"uid":"ves_graduate_35","name":"Federico Arrieta Villagra","image":"https://d33wubrfki0l68.cloudfront.net/5cf747dd741516558d1e96aca1d5462ed523caf4/5b8e5/uploads/2018/04/06/piscinas-claras-fede-face.jpg","location":{"name":"Nosara","geo":null},"phone":"(506) 8403-8880","email":null},{"uid":"ves_graduate_36","name":"Karina Rosales Marchena","image":"https://d33wubrfki0l68.cloudfront.net/6b47f0c198f6413fe1c7bb39211cbdcd8e189ab7/2337d/uploads/2018/04/06/lotus-massage-nosara-face.jpg","location":{"name":"Nosara","geo":null},"phone":"(506) 8833-1572","email":null},{"uid":"ves_graduate_37","name":"Dayana Reyes Garcia","image":"https://d33wubrfki0l68.cloudfront.net/7b7b773791c738a1bc1718ea8c46cf30afc762e9/d2a16/uploads/2018/04/06/reposteria-los-reyes-face.png","location":{"name":"Nosara","geo":null},"phone":"(506) 8732-4122","email":null},{"uid":"ves_graduate_39","name":"Moises Lopez","image":"https://d33wubrfki0l68.cloudfront.net/55a7a059ffa8cd1d05f09bdd114cffdcacd805b2/57f1b/uploads/2018/04/06/tico-tech-face.jpg","location":{"name":"Nosara","geo":null},"phone":"(506) 8334-0420","email":null},{"uid":"ves_graduate_40","name":"Anadilsa Rosales Diaz","image":"https://d33wubrfki0l68.cloudfront.net/79ee20527ae028861146f056a79455d9ff248ae6/9ddab/uploads/2018/04/06/laspalmeras-face.jpg","location":{"name":"Nosara","geo":null},"phone":"(506) 8734-9380","email":null},{"uid":"ves_graduate_41","name":"Elizabeth Bran Rosales","image":"https://d33wubrfki0l68.cloudfront.net/c7fcc75200b0e1087c292a509f903628df5c6ef4/f6a3c/uploads/2018/04/06/elizabeth-bran-rosales-face.jpg","location":{"name":"Nosara","geo":null},"phone":"(506) 8899-9447","email":null},{"uid":"ves_graduate_42","name":"Sheyla Rosales Dinarte","image":"https://d33wubrfki0l68.cloudfront.net/4f360b3a235015c7f2c581774c5ec06848fc4362/d5255/uploads/2018/04/06/sheyla-vive-el-sueno-nosara-costa-rica-face.jpg","location":{"name":"Nosara","geo":null},"phone":"(506) 8496-9569","email":null},{"uid":"ves_graduate_43","name":"Yaniria Gonzalez","image":"https://d33wubrfki0l68.cloudfront.net/bba988edf24ade52fa6f4624e3702fa3d05ea800/7acee/uploads/2018/04/06/yanira-vive-el-sueno-1.jpg","location":{"name":"Nosara","geo":null},"phone":null,"email":null},{"uid":"ves_graduate_44","name":"Milagro Castillo","image":"https://d33wubrfki0l68.cloudfront.net/7b55648df49e5c26fb25f666c8193f2dcc63a180/17750/uploads/2018/04/06/milagro-graduate-vive-el-sueno-face.jpg","location":{"name":"Nosara","geo":null},"phone":null,"email":null},{"uid":"ves_graduate_45","name":"Ana Rosales","image":"https://d33wubrfki0l68.cloudfront.net/b5c3c60fac2e3be3ca4cecd8731f259711c374a0/e74c5/uploads/2018/05/15/ana.png","location":{"name":"Nosara","geo":null},"phone":"(506) 8514-1944","email":null},{"uid":"ves_graduate_46","name":"Juan Carlos","image":"https://d33wubrfki0l68.cloudfront.net/bf5bcb2452f61b442b1c8d332ae09b1aaea691b0/30b8c/uploads/2018/05/15/juan.png","location":{"name":"Nosara","geo":null},"phone":"(506) 8919-5574","email":null},{"uid":"ves_graduate_47","name":"Ricardo Moraga","image":"https://d33wubrfki0l68.cloudfront.net/acf7923467223a9054d27663fbf0148a603a9e2e/1e71b/uploads/2018/05/15/ricardo.png","location":{"name":"Nosara","geo":null},"phone":null,"email":null},{"uid":"ves_graduate_48","name":"Warner Gerardo","image":"https://d33wubrfki0l68.cloudfront.net/c447d08084ced31142f2d4dd0584e508b19c513d/8bb0f/uploads/2018/05/15/warner.png","location":{"name":"Nosara","geo":null},"phone":null,"email":null},{"uid":"ves_graduate_49","name":"Ileana Aviles","image":"https://d33wubrfki0l68.cloudfront.net/6a565e7f2f540267d842390d63c53163dbdb9f3a/903df/uploads/2018/05/15/ileana.png","location":{"name":"Nosara","geo":null},"phone":null,"email":null},{"uid":"ves_graduate_50","name":"Isa Obando","image":"https://d33wubrfki0l68.cloudfront.net/0846f786511a5095bf9432a87784e7a2f65edb34/a9d7d/uploads/2018/05/15/isa.png","location":{"name":"Nosara","geo":null},"phone":null,"email":null},{"uid":"ves_graduate_51","name":"Yisenia Rojas","image":"https://d33wubrfki0l68.cloudfront.net/a6cfeee3cff7b33c143c4e32d7570019170a6b49/8f23d/uploads/2018/05/15/yisenia.png","location":{"name":"Nosara","geo":null},"phone":null,"email":null},{"uid":"ves_graduate_52","name":"Edith Quirós","image":"https://d33wubrfki0l68.cloudfront.net/ee40d907e36a91731971375a7a20b636b83a99d7/270db/uploads/2018/05/15/edith.png","location":{"name":"Nosara","geo":null},"phone":null,"email":null},{"uid":"ves_graduate_53","name":"Cinthya Rosales","image":"https://d33wubrfki0l68.cloudfront.net/4c3a105d02fe4397d673d138a6eb85688d236c67/1cf4e/uploads/2018/05/15/cinthya.png","location":{"name":"Nosara","geo":null},"phone":null,"email":null},{"uid":"ves_graduate_54","name":"Carmen Rosales","image":"https://d33wubrfki0l68.cloudfront.net/cb389740487edee3350c35677d9a61a95ebd4e5c/da613/uploads/2018/05/15/carmen.png","location":{"name":"Nosara","geo":null},"phone":null,"email":null},{"uid":"ves_graduate_55","name":"Maritza Sanchez","image":"https://d33wubrfki0l68.cloudfront.net/b96246a71ca6aea0a4f577c6a99ea4ddf1936f42/aa50e/uploads/2018/05/15/maritza.png","location":{"name":"Nosara","geo":null},"phone":null,"email":null}],"type":"person","name":["People","Person"]} \ No newline at end of file diff --git a/themes/humans-of-nosara/static/js/bundle.js b/themes/humans-of-nosara/static/js/bundle.js index 593c0b5..33d1231 100644 --- a/themes/humans-of-nosara/static/js/bundle.js +++ b/themes/humans-of-nosara/static/js/bundle.js @@ -1,2 +1,665 @@ -!function e(t,n,r){function i(l,o){if(!n[l]){if(!t[l]){var a="function"==typeof require&&require;if(!o&&a)return a(l,!0);if(u)return u(l,!0);var c=new Error("Cannot find module '"+l+"'");throw c.code="MODULE_NOT_FOUND",c}var f=n[l]={exports:{}};t[l][0].call(f.exports,function(e){var n=t[l][1][e];return i(n||e)},f,f.exports,e,t,n,r)}return n[l].exports}for(var u="function"==typeof require&&require,l=0;l input").forEach(function(e){var t=r(e,"label")[0];e.value&&t.classList.add("field__label--active"),e.addEventListener("focus",function(){t.classList.add("field__label--active")}),e.addEventListener("focusout",function(){i(function(){e.value||t.classList.remove("field__label--active")})}),e.addEventListener("change",function(){i(function(){e.value&&t.classList.add("field__label--active")})})})},{}]},{},[1]); +(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o input') +.forEach(function ($input) { + var $label = siblings($input, 'label')[0]; + if ($input.value) { + $label.classList.add('field__label--active'); + } + $input.addEventListener('focus', function () { + $label.classList.add('field__label--active'); + }); + $input.addEventListener('focusout', function () { + delay(function () { + if(!$input.value) + $label.classList.remove('field__label--active'); + }); + }); + $input.addEventListener('change', function () { + delay(function () { + if($input.value) + $label.classList.add('field__label--active'); + }); + }); +}) +},{}],2:[function(require,module,exports){ +const preact = require('preact') +const h = preact.h +const Component = preact.Component + +class Search extends Component { + constructor(props) { + super(props) + + this.state = { + query: '', + data: {}, + facets: [] + } + + this.normalizers = { + 'name': data => data, + 'phone': data => data && data.replace(/(\(*-*\)*\s*)/g, ''), + 'location.name': data => data + } + + this.onChange = this.onChange.bind(this) + } + + normalize(name, data) { + return this.normalizers[name](data) + } + + getKey(item, key) { + let root = item + const parts = key.split('.') + while (parts.length) { + root = root[parts.shift()] + } + return root + } + + createFacets(entityTypes) { + // Store all searchable values + const facets = [] + + // Get the searchable keys on each entity + const keys = Object.keys(this.normalizers) + + // Loop through each entity and collect searchable values + entityTypes.forEach(entityType => { + entityType.data.forEach(entity => { + keys.forEach(key => { + const searchable = this.normalize(key, this.getKey(entity, key)) + + if (searchable) { + facets.push({ + key: searchable, + uid: `${entityType.type}:${entity.uid}` + }) + } + }) + }) + }) + + return facets + } + + createMap(entityTypes) { + const data = {} + entityTypes.forEach(entityType => { + // Create the index for this entity type + data[entityType.type] = data[entityType.type] || {} + + // Fill the index with each unique entity + entityType.data.forEach(entity => { + data[entityType.type][entity.uid] = entity + }) + }) + return data + } + + componentDidMount() { + this + .load() + .then(entityTypes => { + const data = this.createMap(entityTypes) + const facets = this.createFacets(entityTypes) + this.setState({ data, facets }) + }) + } + + onChange(event) { + this.setState({ query: event.target.value }) + } + + load() { + return Promise.all([ + '/data/c21_property.json', + '/data/hon_charity.json', + '/data/hon_interviewee.json', + '/data/ves_graduate.json', + '/data/remax_property.json' + ].map(async data => { + const response = await fetch(data) + return await response.json() + })) + } + + dedupe(arr, key) { + return arr.filter((o, i, arr) => arr.findIndex(t => t[key] === o[key]) === i) + } + + itemFromUID(uid) { + const parts = uid.split(':') + const entityType = parts.shift() + const entityId = parts.shift() + + return this.state.data[entityType][entityId] + } + + query(n) { + const multi = this.state.query.split(' ') + const occurences = {} + const results = [] + + while (multi.length) { + const next = multi.shift() + results.push.apply( + results, + this + .state + .facets + .filter(f => f.key.toLowerCase().indexOf(next) > -1) + ) + } + + // Create a map to sort results by # of matches + results + .forEach(result => { + occurences[result.uid] = occurences[result.uid] || 0 + occurences[result.uid]++ + }) + + return ( + this + .dedupe( + results + .filter(item => occurences[item.uid] > multi.length) + .sort((a, b) => occurences[b.uid] - occurences[a.uid]), + 'uid' + ) + .map(item => { console.log(item); return item; }) + .slice(0, n) + .map(result => this.itemFromUID(result.uid)) + ) + } + + render() { + const results = this.state.query ? this.query(25).map(item => { + const src = !!item.image + ? item.image + : !!item.images + ? item.images[0] + : null + const href = !!item.url + ? item.url + : null + const phone = !!item.phone + ? item.phone + : null + const price = !!item.price + ? item.price + : null + const location = !!item.location + ? item.location + : null + const locationName = !!location + ? location.name + : null + + return ( + h('div', { className: 'search__result' }, + h('a', { href, target: '_blank' }, [ + src ? h('div', { className: 'search__image', style: { backgroundImage: `url(${src})` } }) : null, + price + ? h('div', { className: 'search__price' }, `$${Number(price).toLocaleString()}`) + : null, + h('h3', null, item.name), + phone + ? href + ? h('div', { className: 'search__phone' }, phone) + : h('a', { href: `tel:${phone}` }, h('div', { className: 'search__phone' }, phone)) + : null, + locationName + ? h('div', { className: 'search__location' }, locationName) + : null, + ]) + ) + ) + }) : null + + return ( + h('div', null, [ + h('div', { className: 'field search__field '}, [ + h('svg', { className: 'search__icon', xmlns: 'http://www.w3.org/2000/svg', viewBox: '0 0 20 20' }, [ h('path', { d: 'M12.9 14.32a8 8 0 1 1 1.41-1.41l5.35 5.33-1.42 1.42-5.33-5.34zM8 14A6 6 0 1 0 8 2a6 6 0 0 0 0 12z' }) ]), + h('input', { value: this.state.query, className: 'field__input', id: 'search', type: 'text', name: 'search', placeholder: 'What are you looking for?', onInput: this.onChange }) + ]), + !this.state.query ? h('div', { className: 'search__suggestions' }, 'You could try looking for people, properties or charities.') : null, + h('div', { className: 'search__results' }, results) + ]) + ) + } +} + +preact.render(h(Search), document.querySelector('#search')) +},{"preact":3}],3:[function(require,module,exports){ +!function() { + 'use strict'; + function h(nodeName, attributes) { + var lastSimple, child, simple, i, children = EMPTY_CHILDREN; + for (i = arguments.length; i-- > 2; ) stack.push(arguments[i]); + if (attributes && null != attributes.children) { + if (!stack.length) stack.push(attributes.children); + delete attributes.children; + } + while (stack.length) if ((child = stack.pop()) && void 0 !== child.pop) for (i = child.length; i--; ) stack.push(child[i]); else { + if ('boolean' == typeof child) child = null; + if (simple = 'function' != typeof nodeName) if (null == child) child = ''; else if ('number' == typeof child) child = String(child); else if ('string' != typeof child) simple = !1; + if (simple && lastSimple) children[children.length - 1] += child; else if (children === EMPTY_CHILDREN) children = [ child ]; else children.push(child); + lastSimple = simple; + } + var p = new VNode(); + p.nodeName = nodeName; + p.children = children; + p.attributes = null == attributes ? void 0 : attributes; + p.key = null == attributes ? void 0 : attributes.key; + if (void 0 !== options.vnode) options.vnode(p); + return p; + } + function extend(obj, props) { + for (var i in props) obj[i] = props[i]; + return obj; + } + function applyRef(ref, value) { + if (null != ref) if ('function' == typeof ref) ref(value); else ref.current = value; + } + function cloneElement(vnode, props) { + return h(vnode.nodeName, extend(extend({}, vnode.attributes), props), arguments.length > 2 ? [].slice.call(arguments, 2) : vnode.children); + } + function enqueueRender(component) { + if (!component.__d && (component.__d = !0) && 1 == items.push(component)) (options.debounceRendering || defer)(rerender); + } + function rerender() { + var p; + while (p = items.pop()) if (p.__d) renderComponent(p); + } + function isSameNodeType(node, vnode, hydrating) { + if ('string' == typeof vnode || 'number' == typeof vnode) return void 0 !== node.splitText; + if ('string' == typeof vnode.nodeName) return !node._componentConstructor && isNamedNode(node, vnode.nodeName); else return hydrating || node._componentConstructor === vnode.nodeName; + } + function isNamedNode(node, nodeName) { + return node.__n === nodeName || node.nodeName.toLowerCase() === nodeName.toLowerCase(); + } + function getNodeProps(vnode) { + var props = extend({}, vnode.attributes); + props.children = vnode.children; + var defaultProps = vnode.nodeName.defaultProps; + if (void 0 !== defaultProps) for (var i in defaultProps) if (void 0 === props[i]) props[i] = defaultProps[i]; + return props; + } + function createNode(nodeName, isSvg) { + var node = isSvg ? document.createElementNS('http://www.w3.org/2000/svg', nodeName) : document.createElement(nodeName); + node.__n = nodeName; + return node; + } + function removeNode(node) { + var parentNode = node.parentNode; + if (parentNode) parentNode.removeChild(node); + } + function setAccessor(node, name, old, value, isSvg) { + if ('className' === name) name = 'class'; + if ('key' === name) ; else if ('ref' === name) { + applyRef(old, null); + applyRef(value, node); + } else if ('class' === name && !isSvg) node.className = value || ''; else if ('style' === name) { + if (!value || 'string' == typeof value || 'string' == typeof old) node.style.cssText = value || ''; + if (value && 'object' == typeof value) { + if ('string' != typeof old) for (var i in old) if (!(i in value)) node.style[i] = ''; + for (var i in value) node.style[i] = 'number' == typeof value[i] && !1 === IS_NON_DIMENSIONAL.test(i) ? value[i] + 'px' : value[i]; + } + } else if ('dangerouslySetInnerHTML' === name) { + if (value) node.innerHTML = value.__html || ''; + } else if ('o' == name[0] && 'n' == name[1]) { + var useCapture = name !== (name = name.replace(/Capture$/, '')); + name = name.toLowerCase().substring(2); + if (value) { + if (!old) node.addEventListener(name, eventProxy, useCapture); + } else node.removeEventListener(name, eventProxy, useCapture); + (node.__l || (node.__l = {}))[name] = value; + } else if ('list' !== name && 'type' !== name && !isSvg && name in node) { + try { + node[name] = null == value ? '' : value; + } catch (e) {} + if ((null == value || !1 === value) && 'spellcheck' != name) node.removeAttribute(name); + } else { + var ns = isSvg && name !== (name = name.replace(/^xlink:?/, '')); + if (null == value || !1 === value) if (ns) node.removeAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase()); else node.removeAttribute(name); else if ('function' != typeof value) if (ns) node.setAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase(), value); else node.setAttribute(name, value); + } + } + function eventProxy(e) { + return this.__l[e.type](options.event && options.event(e) || e); + } + function flushMounts() { + var c; + while (c = mounts.shift()) { + if (options.afterMount) options.afterMount(c); + if (c.componentDidMount) c.componentDidMount(); + } + } + function diff(dom, vnode, context, mountAll, parent, componentRoot) { + if (!diffLevel++) { + isSvgMode = null != parent && void 0 !== parent.ownerSVGElement; + hydrating = null != dom && !('__preactattr_' in dom); + } + var ret = idiff(dom, vnode, context, mountAll, componentRoot); + if (parent && ret.parentNode !== parent) parent.appendChild(ret); + if (!--diffLevel) { + hydrating = !1; + if (!componentRoot) flushMounts(); + } + return ret; + } + function idiff(dom, vnode, context, mountAll, componentRoot) { + var out = dom, prevSvgMode = isSvgMode; + if (null == vnode || 'boolean' == typeof vnode) vnode = ''; + if ('string' == typeof vnode || 'number' == typeof vnode) { + if (dom && void 0 !== dom.splitText && dom.parentNode && (!dom._component || componentRoot)) { + if (dom.nodeValue != vnode) dom.nodeValue = vnode; + } else { + out = document.createTextNode(vnode); + if (dom) { + if (dom.parentNode) dom.parentNode.replaceChild(out, dom); + recollectNodeTree(dom, !0); + } + } + out.__preactattr_ = !0; + return out; + } + var vnodeName = vnode.nodeName; + if ('function' == typeof vnodeName) return buildComponentFromVNode(dom, vnode, context, mountAll); + isSvgMode = 'svg' === vnodeName ? !0 : 'foreignObject' === vnodeName ? !1 : isSvgMode; + vnodeName = String(vnodeName); + if (!dom || !isNamedNode(dom, vnodeName)) { + out = createNode(vnodeName, isSvgMode); + if (dom) { + while (dom.firstChild) out.appendChild(dom.firstChild); + if (dom.parentNode) dom.parentNode.replaceChild(out, dom); + recollectNodeTree(dom, !0); + } + } + var fc = out.firstChild, props = out.__preactattr_, vchildren = vnode.children; + if (null == props) { + props = out.__preactattr_ = {}; + for (var a = out.attributes, i = a.length; i--; ) props[a[i].name] = a[i].value; + } + if (!hydrating && vchildren && 1 === vchildren.length && 'string' == typeof vchildren[0] && null != fc && void 0 !== fc.splitText && null == fc.nextSibling) { + if (fc.nodeValue != vchildren[0]) fc.nodeValue = vchildren[0]; + } else if (vchildren && vchildren.length || null != fc) innerDiffNode(out, vchildren, context, mountAll, hydrating || null != props.dangerouslySetInnerHTML); + diffAttributes(out, vnode.attributes, props); + isSvgMode = prevSvgMode; + return out; + } + function innerDiffNode(dom, vchildren, context, mountAll, isHydrating) { + var j, c, f, vchild, child, originalChildren = dom.childNodes, children = [], keyed = {}, keyedLen = 0, min = 0, len = originalChildren.length, childrenLen = 0, vlen = vchildren ? vchildren.length : 0; + if (0 !== len) for (var i = 0; i < len; i++) { + var _child = originalChildren[i], props = _child.__preactattr_, key = vlen && props ? _child._component ? _child._component.__k : props.key : null; + if (null != key) { + keyedLen++; + keyed[key] = _child; + } else if (props || (void 0 !== _child.splitText ? isHydrating ? _child.nodeValue.trim() : !0 : isHydrating)) children[childrenLen++] = _child; + } + if (0 !== vlen) for (var i = 0; i < vlen; i++) { + vchild = vchildren[i]; + child = null; + var key = vchild.key; + if (null != key) { + if (keyedLen && void 0 !== keyed[key]) { + child = keyed[key]; + keyed[key] = void 0; + keyedLen--; + } + } else if (min < childrenLen) for (j = min; j < childrenLen; j++) if (void 0 !== children[j] && isSameNodeType(c = children[j], vchild, isHydrating)) { + child = c; + children[j] = void 0; + if (j === childrenLen - 1) childrenLen--; + if (j === min) min++; + break; + } + child = idiff(child, vchild, context, mountAll); + f = originalChildren[i]; + if (child && child !== dom && child !== f) if (null == f) dom.appendChild(child); else if (child === f.nextSibling) removeNode(f); else dom.insertBefore(child, f); + } + if (keyedLen) for (var i in keyed) if (void 0 !== keyed[i]) recollectNodeTree(keyed[i], !1); + while (min <= childrenLen) if (void 0 !== (child = children[childrenLen--])) recollectNodeTree(child, !1); + } + function recollectNodeTree(node, unmountOnly) { + var component = node._component; + if (component) unmountComponent(component); else { + if (null != node.__preactattr_) applyRef(node.__preactattr_.ref, null); + if (!1 === unmountOnly || null == node.__preactattr_) removeNode(node); + removeChildren(node); + } + } + function removeChildren(node) { + node = node.lastChild; + while (node) { + var next = node.previousSibling; + recollectNodeTree(node, !0); + node = next; + } + } + function diffAttributes(dom, attrs, old) { + var name; + for (name in old) if ((!attrs || null == attrs[name]) && null != old[name]) setAccessor(dom, name, old[name], old[name] = void 0, isSvgMode); + for (name in attrs) if (!('children' === name || 'innerHTML' === name || name in old && attrs[name] === ('value' === name || 'checked' === name ? dom[name] : old[name]))) setAccessor(dom, name, old[name], old[name] = attrs[name], isSvgMode); + } + function createComponent(Ctor, props, context) { + var inst, i = recyclerComponents.length; + if (Ctor.prototype && Ctor.prototype.render) { + inst = new Ctor(props, context); + Component.call(inst, props, context); + } else { + inst = new Component(props, context); + inst.constructor = Ctor; + inst.render = doRender; + } + while (i--) if (recyclerComponents[i].constructor === Ctor) { + inst.__b = recyclerComponents[i].__b; + recyclerComponents.splice(i, 1); + return inst; + } + return inst; + } + function doRender(props, state, context) { + return this.constructor(props, context); + } + function setComponentProps(component, props, renderMode, context, mountAll) { + if (!component.__x) { + component.__x = !0; + component.__r = props.ref; + component.__k = props.key; + delete props.ref; + delete props.key; + if (void 0 === component.constructor.getDerivedStateFromProps) if (!component.base || mountAll) { + if (component.componentWillMount) component.componentWillMount(); + } else if (component.componentWillReceiveProps) component.componentWillReceiveProps(props, context); + if (context && context !== component.context) { + if (!component.__c) component.__c = component.context; + component.context = context; + } + if (!component.__p) component.__p = component.props; + component.props = props; + component.__x = !1; + if (0 !== renderMode) if (1 === renderMode || !1 !== options.syncComponentUpdates || !component.base) renderComponent(component, 1, mountAll); else enqueueRender(component); + applyRef(component.__r, component); + } + } + function renderComponent(component, renderMode, mountAll, isChild) { + if (!component.__x) { + var rendered, inst, cbase, props = component.props, state = component.state, context = component.context, previousProps = component.__p || props, previousState = component.__s || state, previousContext = component.__c || context, isUpdate = component.base, nextBase = component.__b, initialBase = isUpdate || nextBase, initialChildComponent = component._component, skip = !1, snapshot = previousContext; + if (component.constructor.getDerivedStateFromProps) { + state = extend(extend({}, state), component.constructor.getDerivedStateFromProps(props, state)); + component.state = state; + } + if (isUpdate) { + component.props = previousProps; + component.state = previousState; + component.context = previousContext; + if (2 !== renderMode && component.shouldComponentUpdate && !1 === component.shouldComponentUpdate(props, state, context)) skip = !0; else if (component.componentWillUpdate) component.componentWillUpdate(props, state, context); + component.props = props; + component.state = state; + component.context = context; + } + component.__p = component.__s = component.__c = component.__b = null; + component.__d = !1; + if (!skip) { + rendered = component.render(props, state, context); + if (component.getChildContext) context = extend(extend({}, context), component.getChildContext()); + if (isUpdate && component.getSnapshotBeforeUpdate) snapshot = component.getSnapshotBeforeUpdate(previousProps, previousState); + var toUnmount, base, childComponent = rendered && rendered.nodeName; + if ('function' == typeof childComponent) { + var childProps = getNodeProps(rendered); + inst = initialChildComponent; + if (inst && inst.constructor === childComponent && childProps.key == inst.__k) setComponentProps(inst, childProps, 1, context, !1); else { + toUnmount = inst; + component._component = inst = createComponent(childComponent, childProps, context); + inst.__b = inst.__b || nextBase; + inst.__u = component; + setComponentProps(inst, childProps, 0, context, !1); + renderComponent(inst, 1, mountAll, !0); + } + base = inst.base; + } else { + cbase = initialBase; + toUnmount = initialChildComponent; + if (toUnmount) cbase = component._component = null; + if (initialBase || 1 === renderMode) { + if (cbase) cbase._component = null; + base = diff(cbase, rendered, context, mountAll || !isUpdate, initialBase && initialBase.parentNode, !0); + } + } + if (initialBase && base !== initialBase && inst !== initialChildComponent) { + var baseParent = initialBase.parentNode; + if (baseParent && base !== baseParent) { + baseParent.replaceChild(base, initialBase); + if (!toUnmount) { + initialBase._component = null; + recollectNodeTree(initialBase, !1); + } + } + } + if (toUnmount) unmountComponent(toUnmount); + component.base = base; + if (base && !isChild) { + var componentRef = component, t = component; + while (t = t.__u) (componentRef = t).base = base; + base._component = componentRef; + base._componentConstructor = componentRef.constructor; + } + } + if (!isUpdate || mountAll) mounts.push(component); else if (!skip) { + if (component.componentDidUpdate) component.componentDidUpdate(previousProps, previousState, snapshot); + if (options.afterUpdate) options.afterUpdate(component); + } + while (component.__h.length) component.__h.pop().call(component); + if (!diffLevel && !isChild) flushMounts(); + } + } + function buildComponentFromVNode(dom, vnode, context, mountAll) { + var c = dom && dom._component, originalComponent = c, oldDom = dom, isDirectOwner = c && dom._componentConstructor === vnode.nodeName, isOwner = isDirectOwner, props = getNodeProps(vnode); + while (c && !isOwner && (c = c.__u)) isOwner = c.constructor === vnode.nodeName; + if (c && isOwner && (!mountAll || c._component)) { + setComponentProps(c, props, 3, context, mountAll); + dom = c.base; + } else { + if (originalComponent && !isDirectOwner) { + unmountComponent(originalComponent); + dom = oldDom = null; + } + c = createComponent(vnode.nodeName, props, context); + if (dom && !c.__b) { + c.__b = dom; + oldDom = null; + } + setComponentProps(c, props, 1, context, mountAll); + dom = c.base; + if (oldDom && dom !== oldDom) { + oldDom._component = null; + recollectNodeTree(oldDom, !1); + } + } + return dom; + } + function unmountComponent(component) { + if (options.beforeUnmount) options.beforeUnmount(component); + var base = component.base; + component.__x = !0; + if (component.componentWillUnmount) component.componentWillUnmount(); + component.base = null; + var inner = component._component; + if (inner) unmountComponent(inner); else if (base) { + if (null != base.__preactattr_) applyRef(base.__preactattr_.ref, null); + component.__b = base; + removeNode(base); + recyclerComponents.push(component); + removeChildren(base); + } + applyRef(component.__r, null); + } + function Component(props, context) { + this.__d = !0; + this.context = context; + this.props = props; + this.state = this.state || {}; + this.__h = []; + } + function render(vnode, parent, merge) { + return diff(merge, vnode, {}, !1, parent, !1); + } + function createRef() { + return {}; + } + var VNode = function() {}; + var options = {}; + var stack = []; + var EMPTY_CHILDREN = []; + var defer = 'function' == typeof Promise ? Promise.resolve().then.bind(Promise.resolve()) : setTimeout; + var IS_NON_DIMENSIONAL = /acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i; + var items = []; + var mounts = []; + var diffLevel = 0; + var isSvgMode = !1; + var hydrating = !1; + var recyclerComponents = []; + extend(Component.prototype, { + setState: function(state, callback) { + if (!this.__s) this.__s = this.state; + this.state = extend(extend({}, this.state), 'function' == typeof state ? state(this.state, this.props) : state); + if (callback) this.__h.push(callback); + enqueueRender(this); + }, + forceUpdate: function(callback) { + if (callback) this.__h.push(callback); + renderComponent(this, 2); + }, + render: function() {} + }); + var preact = { + h: h, + createElement: h, + cloneElement: cloneElement, + createRef: createRef, + Component: Component, + render: render, + rerender: rerender, + options: options + }; + if ('undefined' != typeof module) module.exports = preact; else self.preact = preact; +}(); + +},{}]},{},[1,2]) + //# sourceMappingURL=bundle.js.map diff --git a/themes/humans-of-nosara/static/js/bundle.js.map b/themes/humans-of-nosara/static/js/bundle.js.map index 7efa5d2..6ac321e 100644 --- a/themes/humans-of-nosara/static/js/bundle.js.map +++ b/themes/humans-of-nosara/static/js/bundle.js.map @@ -1 +1 @@ -{"version":3,"sources":["node_modules/browser-pack/_prelude.js","components/field/field.js"],"names":["e","t","n","r","s","o","u","a","require","i","f","Error","code","l","exports","call","length","1","module","siblings","domObj","query","slice","parentElement","querySelectorAll","filter","d","delay","cb","setTimeout","document","forEach","$input","$label","value","classList","add","addEventListener","remove"],"mappings":"CAAA,SAAAA,EAAAC,EAAAC,EAAAC,GAAA,SAAAC,EAAAC,EAAAC,GAAA,IAAAJ,EAAAG,GAAA,CAAA,IAAAJ,EAAAI,GAAA,CAAA,IAAAE,EAAA,mBAAAC,SAAAA,QAAA,IAAAF,GAAAC,EAAA,OAAAA,EAAAF,GAAA,GAAA,GAAAI,EAAA,OAAAA,EAAAJ,GAAA,GAAA,IAAAK,EAAA,IAAAC,MAAA,uBAAAN,EAAA,KAAA,MAAAK,EAAAE,KAAA,mBAAAF,EAAA,IAAAG,EAAAX,EAAAG,IAAAS,YAAAb,EAAAI,GAAA,GAAAU,KAAAF,EAAAC,QAAA,SAAAd,GAAA,IAAAE,EAAAD,EAAAI,GAAA,GAAAL,GAAA,OAAAI,EAAAF,GAAAF,IAAAa,EAAAA,EAAAC,QAAAd,EAAAC,EAAAC,EAAAC,GAAA,OAAAD,EAAAG,GAAAS,QAAA,IAAA,IAAAL,EAAA,mBAAAD,SAAAA,QAAAH,EAAA,EAAAA,EAAAF,EAAAa,OAAAX,IAAAD,EAAAD,EAAAE,IAAA,OAAAD,EAAA,EAAAa,GAAA,SAAAT,EAAAU,EAAAJ,GCAA,SAAAK,EAAAC,EAAAC,GACA,SAAAC,MAAAP,KACAK,EACAG,cACAC,iBAAAH,IACAI,OAAA,SAAAC,GAAA,OAAAA,GAAAN,IAGA,SAAAO,EAAAC,GACAC,WAAAD,EAAA,KAGAE,SAAAN,iBAAA,kBACAO,QAAA,SAAAC,GACA,IAAAC,EAAAd,EAAAa,EAAA,SAAA,GACAA,EAAAE,OACAD,EAAAE,UAAAC,IAAA,wBAEAJ,EAAAK,iBAAA,QAAA,WACAJ,EAAAE,UAAAC,IAAA,0BAEAJ,EAAAK,iBAAA,WAAA,WACAV,EAAA,WACAK,EAAAE,OACAD,EAAAE,UAAAG,OAAA,4BAGAN,EAAAK,iBAAA,SAAA,WACAV,EAAA,WACAK,EAAAE,OACAD,EAAAE,UAAAC,IAAA","file":"bundle.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o input')\n.forEach(function ($input) {\n var $label = siblings($input, 'label')[0];\n if ($input.value) {\n $label.classList.add('field__label--active');\n }\n $input.addEventListener('focus', function () {\n $label.classList.add('field__label--active');\n });\n $input.addEventListener('focusout', function () {\n delay(function () {\n if(!$input.value)\n $label.classList.remove('field__label--active');\n });\n });\n $input.addEventListener('change', function () {\n delay(function () {\n if($input.value)\n $label.classList.add('field__label--active');\n });\n });\n});"]} \ No newline at end of file +{"version":3,"sources":["node_modules/browser-pack/_prelude.js","components/field/field.js","components/search/search.js","node_modules/preact/dist/preact.js"],"names":[],"mappings":"AAAA;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"bundle.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o input')\n.forEach(function ($input) {\n var $label = siblings($input, 'label')[0];\n if ($input.value) {\n $label.classList.add('field__label--active');\n }\n $input.addEventListener('focus', function () {\n $label.classList.add('field__label--active');\n });\n $input.addEventListener('focusout', function () {\n delay(function () {\n if(!$input.value)\n $label.classList.remove('field__label--active');\n });\n });\n $input.addEventListener('change', function () {\n delay(function () {\n if($input.value)\n $label.classList.add('field__label--active');\n });\n });\n})","const preact = require('preact')\nconst h = preact.h\nconst Component = preact.Component\n\nclass Search extends Component {\n constructor(props) {\n super(props)\n\n this.state = {\n query: '',\n data: {},\n facets: []\n }\n\n this.normalizers = {\n 'name': data => data,\n 'phone': data => data && data.replace(/(\\(*-*\\)*\\s*)/g, ''),\n 'location.name': data => data\n }\n\n this.onChange = this.onChange.bind(this)\n }\n\n normalize(name, data) {\n return this.normalizers[name](data)\n }\n\n getKey(item, key) {\n let root = item\n const parts = key.split('.')\n while (parts.length) {\n root = root[parts.shift()]\n }\n return root\n }\n\n createFacets(entityTypes) {\n // Store all searchable values\n const facets = []\n\n // Get the searchable keys on each entity\n const keys = Object.keys(this.normalizers)\n\n // Loop through each entity and collect searchable values\n entityTypes.forEach(entityType => {\n entityType.data.forEach(entity => {\n keys.forEach(key => {\n const searchable = this.normalize(key, this.getKey(entity, key))\n\n if (searchable) {\n facets.push({\n key: searchable,\n uid: `${entityType.type}:${entity.uid}`\n })\n }\n })\n })\n })\n\n return facets\n }\n\n createMap(entityTypes) {\n const data = {}\n entityTypes.forEach(entityType => {\n // Create the index for this entity type\n data[entityType.type] = data[entityType.type] || {}\n\n // Fill the index with each unique entity\n entityType.data.forEach(entity => {\n data[entityType.type][entity.uid] = entity\n })\n })\n return data\n }\n\n componentDidMount() {\n this\n .load()\n .then(entityTypes => {\n const data = this.createMap(entityTypes)\n const facets = this.createFacets(entityTypes)\n this.setState({ data, facets })\n })\n }\n\n onChange(event) {\n this.setState({ query: event.target.value })\n }\n\n load() {\n return Promise.all([\n '/data/c21_property.json',\n '/data/hon_charity.json',\n '/data/hon_interviewee.json',\n '/data/ves_graduate.json',\n '/data/remax_property.json'\n ].map(async data => {\n const response = await fetch(data)\n return await response.json()\n }))\n }\n\n dedupe(arr, key) {\n return arr.filter((o, i, arr) => arr.findIndex(t => t[key] === o[key]) === i)\n }\n\n itemFromUID(uid) {\n const parts = uid.split(':')\n const entityType = parts.shift()\n const entityId = parts.shift()\n\n return this.state.data[entityType][entityId]\n }\n\n query(n) {\n const multi = this.state.query.split(' ')\n const occurences = {}\n const results = []\n \n while (multi.length) {\n const next = multi.shift()\n results.push.apply(\n results,\n this\n .state\n .facets\n .filter(f => f.key.toLowerCase().indexOf(next) > -1)\n )\n }\n\n // Create a map to sort results by # of matches\n results\n .forEach(result => {\n occurences[result.uid] = occurences[result.uid] || 0\n occurences[result.uid]++\n })\n\n return (\n this\n .dedupe(\n results\n .filter(item => occurences[item.uid] > multi.length)\n .sort((a, b) => occurences[b.uid] - occurences[a.uid]),\n 'uid'\n )\n .map(item => { console.log(item); return item; })\n .slice(0, n)\n .map(result => this.itemFromUID(result.uid))\n )\n }\n\n render() {\n const results = this.state.query ? this.query(25).map(item => {\n const src = !!item.image\n ? item.image\n : !!item.images\n ? item.images[0]\n : null\n const href = !!item.url\n ? item.url\n : null\n const phone = !!item.phone\n ? item.phone\n : null\n const price = !!item.price\n ? item.price\n : null\n const location = !!item.location\n ? item.location\n : null\n const locationName = !!location\n ? location.name\n : null\n\n return (\n h('div', { className: 'search__result' }, \n h('a', { href, target: '_blank' }, [\n src ? h('div', { className: 'search__image', style: { backgroundImage: `url(${src})` } }) : null,\n price\n ? h('div', { className: 'search__price' }, `$${Number(price).toLocaleString()}`)\n : null,\n h('h3', null, item.name),\n phone\n ? href\n ? h('div', { className: 'search__phone' }, phone)\n : h('a', { href: `tel:${phone}` }, h('div', { className: 'search__phone' }, phone))\n : null,\n locationName\n ? h('div', { className: 'search__location' }, locationName)\n : null,\n ])\n )\n )\n }) : null\n\n return (\n h('div', null, [\n h('div', { className: 'field search__field '}, [\n h('svg', { className: 'search__icon', xmlns: 'http://www.w3.org/2000/svg', viewBox: '0 0 20 20' }, [ h('path', { d: 'M12.9 14.32a8 8 0 1 1 1.41-1.41l5.35 5.33-1.42 1.42-5.33-5.34zM8 14A6 6 0 1 0 8 2a6 6 0 0 0 0 12z' }) ]),\n h('input', { value: this.state.query, className: 'field__input', id: 'search', type: 'text', name: 'search', placeholder: 'What are you looking for?', onInput: this.onChange })\n ]),\n !this.state.query ? h('div', { className: 'search__suggestions' }, 'You could try looking for people, properties or charities.') : null,\n h('div', { className: 'search__results' }, results)\n ])\n )\n }\n}\n\npreact.render(h(Search), document.querySelector('#search'))","!function() {\n 'use strict';\n function h(nodeName, attributes) {\n var lastSimple, child, simple, i, children = EMPTY_CHILDREN;\n for (i = arguments.length; i-- > 2; ) stack.push(arguments[i]);\n if (attributes && null != attributes.children) {\n if (!stack.length) stack.push(attributes.children);\n delete attributes.children;\n }\n while (stack.length) if ((child = stack.pop()) && void 0 !== child.pop) for (i = child.length; i--; ) stack.push(child[i]); else {\n if ('boolean' == typeof child) child = null;\n if (simple = 'function' != typeof nodeName) if (null == child) child = ''; else if ('number' == typeof child) child = String(child); else if ('string' != typeof child) simple = !1;\n if (simple && lastSimple) children[children.length - 1] += child; else if (children === EMPTY_CHILDREN) children = [ child ]; else children.push(child);\n lastSimple = simple;\n }\n var p = new VNode();\n p.nodeName = nodeName;\n p.children = children;\n p.attributes = null == attributes ? void 0 : attributes;\n p.key = null == attributes ? void 0 : attributes.key;\n if (void 0 !== options.vnode) options.vnode(p);\n return p;\n }\n function extend(obj, props) {\n for (var i in props) obj[i] = props[i];\n return obj;\n }\n function applyRef(ref, value) {\n if (null != ref) if ('function' == typeof ref) ref(value); else ref.current = value;\n }\n function cloneElement(vnode, props) {\n return h(vnode.nodeName, extend(extend({}, vnode.attributes), props), arguments.length > 2 ? [].slice.call(arguments, 2) : vnode.children);\n }\n function enqueueRender(component) {\n if (!component.__d && (component.__d = !0) && 1 == items.push(component)) (options.debounceRendering || defer)(rerender);\n }\n function rerender() {\n var p;\n while (p = items.pop()) if (p.__d) renderComponent(p);\n }\n function isSameNodeType(node, vnode, hydrating) {\n if ('string' == typeof vnode || 'number' == typeof vnode) return void 0 !== node.splitText;\n if ('string' == typeof vnode.nodeName) return !node._componentConstructor && isNamedNode(node, vnode.nodeName); else return hydrating || node._componentConstructor === vnode.nodeName;\n }\n function isNamedNode(node, nodeName) {\n return node.__n === nodeName || node.nodeName.toLowerCase() === nodeName.toLowerCase();\n }\n function getNodeProps(vnode) {\n var props = extend({}, vnode.attributes);\n props.children = vnode.children;\n var defaultProps = vnode.nodeName.defaultProps;\n if (void 0 !== defaultProps) for (var i in defaultProps) if (void 0 === props[i]) props[i] = defaultProps[i];\n return props;\n }\n function createNode(nodeName, isSvg) {\n var node = isSvg ? document.createElementNS('http://www.w3.org/2000/svg', nodeName) : document.createElement(nodeName);\n node.__n = nodeName;\n return node;\n }\n function removeNode(node) {\n var parentNode = node.parentNode;\n if (parentNode) parentNode.removeChild(node);\n }\n function setAccessor(node, name, old, value, isSvg) {\n if ('className' === name) name = 'class';\n if ('key' === name) ; else if ('ref' === name) {\n applyRef(old, null);\n applyRef(value, node);\n } else if ('class' === name && !isSvg) node.className = value || ''; else if ('style' === name) {\n if (!value || 'string' == typeof value || 'string' == typeof old) node.style.cssText = value || '';\n if (value && 'object' == typeof value) {\n if ('string' != typeof old) for (var i in old) if (!(i in value)) node.style[i] = '';\n for (var i in value) node.style[i] = 'number' == typeof value[i] && !1 === IS_NON_DIMENSIONAL.test(i) ? value[i] + 'px' : value[i];\n }\n } else if ('dangerouslySetInnerHTML' === name) {\n if (value) node.innerHTML = value.__html || '';\n } else if ('o' == name[0] && 'n' == name[1]) {\n var useCapture = name !== (name = name.replace(/Capture$/, ''));\n name = name.toLowerCase().substring(2);\n if (value) {\n if (!old) node.addEventListener(name, eventProxy, useCapture);\n } else node.removeEventListener(name, eventProxy, useCapture);\n (node.__l || (node.__l = {}))[name] = value;\n } else if ('list' !== name && 'type' !== name && !isSvg && name in node) {\n try {\n node[name] = null == value ? '' : value;\n } catch (e) {}\n if ((null == value || !1 === value) && 'spellcheck' != name) node.removeAttribute(name);\n } else {\n var ns = isSvg && name !== (name = name.replace(/^xlink:?/, ''));\n if (null == value || !1 === value) if (ns) node.removeAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase()); else node.removeAttribute(name); else if ('function' != typeof value) if (ns) node.setAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase(), value); else node.setAttribute(name, value);\n }\n }\n function eventProxy(e) {\n return this.__l[e.type](options.event && options.event(e) || e);\n }\n function flushMounts() {\n var c;\n while (c = mounts.shift()) {\n if (options.afterMount) options.afterMount(c);\n if (c.componentDidMount) c.componentDidMount();\n }\n }\n function diff(dom, vnode, context, mountAll, parent, componentRoot) {\n if (!diffLevel++) {\n isSvgMode = null != parent && void 0 !== parent.ownerSVGElement;\n hydrating = null != dom && !('__preactattr_' in dom);\n }\n var ret = idiff(dom, vnode, context, mountAll, componentRoot);\n if (parent && ret.parentNode !== parent) parent.appendChild(ret);\n if (!--diffLevel) {\n hydrating = !1;\n if (!componentRoot) flushMounts();\n }\n return ret;\n }\n function idiff(dom, vnode, context, mountAll, componentRoot) {\n var out = dom, prevSvgMode = isSvgMode;\n if (null == vnode || 'boolean' == typeof vnode) vnode = '';\n if ('string' == typeof vnode || 'number' == typeof vnode) {\n if (dom && void 0 !== dom.splitText && dom.parentNode && (!dom._component || componentRoot)) {\n if (dom.nodeValue != vnode) dom.nodeValue = vnode;\n } else {\n out = document.createTextNode(vnode);\n if (dom) {\n if (dom.parentNode) dom.parentNode.replaceChild(out, dom);\n recollectNodeTree(dom, !0);\n }\n }\n out.__preactattr_ = !0;\n return out;\n }\n var vnodeName = vnode.nodeName;\n if ('function' == typeof vnodeName) return buildComponentFromVNode(dom, vnode, context, mountAll);\n isSvgMode = 'svg' === vnodeName ? !0 : 'foreignObject' === vnodeName ? !1 : isSvgMode;\n vnodeName = String(vnodeName);\n if (!dom || !isNamedNode(dom, vnodeName)) {\n out = createNode(vnodeName, isSvgMode);\n if (dom) {\n while (dom.firstChild) out.appendChild(dom.firstChild);\n if (dom.parentNode) dom.parentNode.replaceChild(out, dom);\n recollectNodeTree(dom, !0);\n }\n }\n var fc = out.firstChild, props = out.__preactattr_, vchildren = vnode.children;\n if (null == props) {\n props = out.__preactattr_ = {};\n for (var a = out.attributes, i = a.length; i--; ) props[a[i].name] = a[i].value;\n }\n if (!hydrating && vchildren && 1 === vchildren.length && 'string' == typeof vchildren[0] && null != fc && void 0 !== fc.splitText && null == fc.nextSibling) {\n if (fc.nodeValue != vchildren[0]) fc.nodeValue = vchildren[0];\n } else if (vchildren && vchildren.length || null != fc) innerDiffNode(out, vchildren, context, mountAll, hydrating || null != props.dangerouslySetInnerHTML);\n diffAttributes(out, vnode.attributes, props);\n isSvgMode = prevSvgMode;\n return out;\n }\n function innerDiffNode(dom, vchildren, context, mountAll, isHydrating) {\n var j, c, f, vchild, child, originalChildren = dom.childNodes, children = [], keyed = {}, keyedLen = 0, min = 0, len = originalChildren.length, childrenLen = 0, vlen = vchildren ? vchildren.length : 0;\n if (0 !== len) for (var i = 0; i < len; i++) {\n var _child = originalChildren[i], props = _child.__preactattr_, key = vlen && props ? _child._component ? _child._component.__k : props.key : null;\n if (null != key) {\n keyedLen++;\n keyed[key] = _child;\n } else if (props || (void 0 !== _child.splitText ? isHydrating ? _child.nodeValue.trim() : !0 : isHydrating)) children[childrenLen++] = _child;\n }\n if (0 !== vlen) for (var i = 0; i < vlen; i++) {\n vchild = vchildren[i];\n child = null;\n var key = vchild.key;\n if (null != key) {\n if (keyedLen && void 0 !== keyed[key]) {\n child = keyed[key];\n keyed[key] = void 0;\n keyedLen--;\n }\n } else if (min < childrenLen) for (j = min; j < childrenLen; j++) if (void 0 !== children[j] && isSameNodeType(c = children[j], vchild, isHydrating)) {\n child = c;\n children[j] = void 0;\n if (j === childrenLen - 1) childrenLen--;\n if (j === min) min++;\n break;\n }\n child = idiff(child, vchild, context, mountAll);\n f = originalChildren[i];\n if (child && child !== dom && child !== f) if (null == f) dom.appendChild(child); else if (child === f.nextSibling) removeNode(f); else dom.insertBefore(child, f);\n }\n if (keyedLen) for (var i in keyed) if (void 0 !== keyed[i]) recollectNodeTree(keyed[i], !1);\n while (min <= childrenLen) if (void 0 !== (child = children[childrenLen--])) recollectNodeTree(child, !1);\n }\n function recollectNodeTree(node, unmountOnly) {\n var component = node._component;\n if (component) unmountComponent(component); else {\n if (null != node.__preactattr_) applyRef(node.__preactattr_.ref, null);\n if (!1 === unmountOnly || null == node.__preactattr_) removeNode(node);\n removeChildren(node);\n }\n }\n function removeChildren(node) {\n node = node.lastChild;\n while (node) {\n var next = node.previousSibling;\n recollectNodeTree(node, !0);\n node = next;\n }\n }\n function diffAttributes(dom, attrs, old) {\n var name;\n for (name in old) if ((!attrs || null == attrs[name]) && null != old[name]) setAccessor(dom, name, old[name], old[name] = void 0, isSvgMode);\n for (name in attrs) if (!('children' === name || 'innerHTML' === name || name in old && attrs[name] === ('value' === name || 'checked' === name ? dom[name] : old[name]))) setAccessor(dom, name, old[name], old[name] = attrs[name], isSvgMode);\n }\n function createComponent(Ctor, props, context) {\n var inst, i = recyclerComponents.length;\n if (Ctor.prototype && Ctor.prototype.render) {\n inst = new Ctor(props, context);\n Component.call(inst, props, context);\n } else {\n inst = new Component(props, context);\n inst.constructor = Ctor;\n inst.render = doRender;\n }\n while (i--) if (recyclerComponents[i].constructor === Ctor) {\n inst.__b = recyclerComponents[i].__b;\n recyclerComponents.splice(i, 1);\n return inst;\n }\n return inst;\n }\n function doRender(props, state, context) {\n return this.constructor(props, context);\n }\n function setComponentProps(component, props, renderMode, context, mountAll) {\n if (!component.__x) {\n component.__x = !0;\n component.__r = props.ref;\n component.__k = props.key;\n delete props.ref;\n delete props.key;\n if (void 0 === component.constructor.getDerivedStateFromProps) if (!component.base || mountAll) {\n if (component.componentWillMount) component.componentWillMount();\n } else if (component.componentWillReceiveProps) component.componentWillReceiveProps(props, context);\n if (context && context !== component.context) {\n if (!component.__c) component.__c = component.context;\n component.context = context;\n }\n if (!component.__p) component.__p = component.props;\n component.props = props;\n component.__x = !1;\n if (0 !== renderMode) if (1 === renderMode || !1 !== options.syncComponentUpdates || !component.base) renderComponent(component, 1, mountAll); else enqueueRender(component);\n applyRef(component.__r, component);\n }\n }\n function renderComponent(component, renderMode, mountAll, isChild) {\n if (!component.__x) {\n var rendered, inst, cbase, props = component.props, state = component.state, context = component.context, previousProps = component.__p || props, previousState = component.__s || state, previousContext = component.__c || context, isUpdate = component.base, nextBase = component.__b, initialBase = isUpdate || nextBase, initialChildComponent = component._component, skip = !1, snapshot = previousContext;\n if (component.constructor.getDerivedStateFromProps) {\n state = extend(extend({}, state), component.constructor.getDerivedStateFromProps(props, state));\n component.state = state;\n }\n if (isUpdate) {\n component.props = previousProps;\n component.state = previousState;\n component.context = previousContext;\n if (2 !== renderMode && component.shouldComponentUpdate && !1 === component.shouldComponentUpdate(props, state, context)) skip = !0; else if (component.componentWillUpdate) component.componentWillUpdate(props, state, context);\n component.props = props;\n component.state = state;\n component.context = context;\n }\n component.__p = component.__s = component.__c = component.__b = null;\n component.__d = !1;\n if (!skip) {\n rendered = component.render(props, state, context);\n if (component.getChildContext) context = extend(extend({}, context), component.getChildContext());\n if (isUpdate && component.getSnapshotBeforeUpdate) snapshot = component.getSnapshotBeforeUpdate(previousProps, previousState);\n var toUnmount, base, childComponent = rendered && rendered.nodeName;\n if ('function' == typeof childComponent) {\n var childProps = getNodeProps(rendered);\n inst = initialChildComponent;\n if (inst && inst.constructor === childComponent && childProps.key == inst.__k) setComponentProps(inst, childProps, 1, context, !1); else {\n toUnmount = inst;\n component._component = inst = createComponent(childComponent, childProps, context);\n inst.__b = inst.__b || nextBase;\n inst.__u = component;\n setComponentProps(inst, childProps, 0, context, !1);\n renderComponent(inst, 1, mountAll, !0);\n }\n base = inst.base;\n } else {\n cbase = initialBase;\n toUnmount = initialChildComponent;\n if (toUnmount) cbase = component._component = null;\n if (initialBase || 1 === renderMode) {\n if (cbase) cbase._component = null;\n base = diff(cbase, rendered, context, mountAll || !isUpdate, initialBase && initialBase.parentNode, !0);\n }\n }\n if (initialBase && base !== initialBase && inst !== initialChildComponent) {\n var baseParent = initialBase.parentNode;\n if (baseParent && base !== baseParent) {\n baseParent.replaceChild(base, initialBase);\n if (!toUnmount) {\n initialBase._component = null;\n recollectNodeTree(initialBase, !1);\n }\n }\n }\n if (toUnmount) unmountComponent(toUnmount);\n component.base = base;\n if (base && !isChild) {\n var componentRef = component, t = component;\n while (t = t.__u) (componentRef = t).base = base;\n base._component = componentRef;\n base._componentConstructor = componentRef.constructor;\n }\n }\n if (!isUpdate || mountAll) mounts.push(component); else if (!skip) {\n if (component.componentDidUpdate) component.componentDidUpdate(previousProps, previousState, snapshot);\n if (options.afterUpdate) options.afterUpdate(component);\n }\n while (component.__h.length) component.__h.pop().call(component);\n if (!diffLevel && !isChild) flushMounts();\n }\n }\n function buildComponentFromVNode(dom, vnode, context, mountAll) {\n var c = dom && dom._component, originalComponent = c, oldDom = dom, isDirectOwner = c && dom._componentConstructor === vnode.nodeName, isOwner = isDirectOwner, props = getNodeProps(vnode);\n while (c && !isOwner && (c = c.__u)) isOwner = c.constructor === vnode.nodeName;\n if (c && isOwner && (!mountAll || c._component)) {\n setComponentProps(c, props, 3, context, mountAll);\n dom = c.base;\n } else {\n if (originalComponent && !isDirectOwner) {\n unmountComponent(originalComponent);\n dom = oldDom = null;\n }\n c = createComponent(vnode.nodeName, props, context);\n if (dom && !c.__b) {\n c.__b = dom;\n oldDom = null;\n }\n setComponentProps(c, props, 1, context, mountAll);\n dom = c.base;\n if (oldDom && dom !== oldDom) {\n oldDom._component = null;\n recollectNodeTree(oldDom, !1);\n }\n }\n return dom;\n }\n function unmountComponent(component) {\n if (options.beforeUnmount) options.beforeUnmount(component);\n var base = component.base;\n component.__x = !0;\n if (component.componentWillUnmount) component.componentWillUnmount();\n component.base = null;\n var inner = component._component;\n if (inner) unmountComponent(inner); else if (base) {\n if (null != base.__preactattr_) applyRef(base.__preactattr_.ref, null);\n component.__b = base;\n removeNode(base);\n recyclerComponents.push(component);\n removeChildren(base);\n }\n applyRef(component.__r, null);\n }\n function Component(props, context) {\n this.__d = !0;\n this.context = context;\n this.props = props;\n this.state = this.state || {};\n this.__h = [];\n }\n function render(vnode, parent, merge) {\n return diff(merge, vnode, {}, !1, parent, !1);\n }\n function createRef() {\n return {};\n }\n var VNode = function() {};\n var options = {};\n var stack = [];\n var EMPTY_CHILDREN = [];\n var defer = 'function' == typeof Promise ? Promise.resolve().then.bind(Promise.resolve()) : setTimeout;\n var IS_NON_DIMENSIONAL = /acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i;\n var items = [];\n var mounts = [];\n var diffLevel = 0;\n var isSvgMode = !1;\n var hydrating = !1;\n var recyclerComponents = [];\n extend(Component.prototype, {\n setState: function(state, callback) {\n if (!this.__s) this.__s = this.state;\n this.state = extend(extend({}, this.state), 'function' == typeof state ? state(this.state, this.props) : state);\n if (callback) this.__h.push(callback);\n enqueueRender(this);\n },\n forceUpdate: function(callback) {\n if (callback) this.__h.push(callback);\n renderComponent(this, 2);\n },\n render: function() {}\n });\n var preact = {\n h: h,\n createElement: h,\n cloneElement: cloneElement,\n createRef: createRef,\n Component: Component,\n render: render,\n rerender: rerender,\n options: options\n };\n if ('undefined' != typeof module) module.exports = preact; else self.preact = preact;\n}();\n//# sourceMappingURL=preact.js.map"],"preExistingComment":"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJjb21wb25lbnRzL2ZpZWxkL2ZpZWxkLmpzIiwiY29tcG9uZW50cy9zZWFyY2gvc2VhcmNoLmpzIiwibm9kZV9tb2R1bGVzL3ByZWFjdC9kaXN0L3ByZWFjdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsImZ1bmN0aW9uIHNpYmxpbmdzIChkb21PYmosIHF1ZXJ5KSB7XG4gIHJldHVybiBbXS5zbGljZS5jYWxsKFxuICAgIGRvbU9ialxuICAgIC5wYXJlbnRFbGVtZW50XG4gICAgLnF1ZXJ5U2VsZWN0b3JBbGwocXVlcnkpXG4gICkuZmlsdGVyKGZ1bmN0aW9uIChkKSB7cmV0dXJuIGQgIT0gZG9tT2JqO30pO1xufVxuXG5mdW5jdGlvbiBkZWxheSAoY2IpIHtcbiAgc2V0VGltZW91dChjYiwgMTAwKTtcbn1cblxuZG9jdW1lbnRcbi5xdWVyeVNlbGVjdG9yQWxsKCcuZmllbGQgPiBpbnB1dCcpXG4uZm9yRWFjaChmdW5jdGlvbiAoJGlucHV0KSB7XG4gIHZhciAkbGFiZWwgPSBzaWJsaW5ncygkaW5wdXQsICdsYWJlbCcpWzBdO1xuICBpZiAoJGlucHV0LnZhbHVlKSB7XG4gICAgJGxhYmVsLmNsYXNzTGlzdC5hZGQoJ2ZpZWxkX19sYWJlbC0tYWN0aXZlJyk7XG4gIH1cbiAgJGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgZnVuY3Rpb24gKCkge1xuICAgICRsYWJlbC5jbGFzc0xpc3QuYWRkKCdmaWVsZF9fbGFiZWwtLWFjdGl2ZScpO1xuICB9KTtcbiAgJGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3Vzb3V0JywgZnVuY3Rpb24gKCkge1xuICAgIGRlbGF5KGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmKCEkaW5wdXQudmFsdWUpXG4gICAgICAgICRsYWJlbC5jbGFzc0xpc3QucmVtb3ZlKCdmaWVsZF9fbGFiZWwtLWFjdGl2ZScpO1xuICAgIH0pO1xuICB9KTtcbiAgJGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZ1bmN0aW9uICgpIHtcbiAgICBkZWxheShmdW5jdGlvbiAoKSB7XG4gICAgICBpZigkaW5wdXQudmFsdWUpXG4gICAgICAgICRsYWJlbC5jbGFzc0xpc3QuYWRkKCdmaWVsZF9fbGFiZWwtLWFjdGl2ZScpO1xuICAgIH0pO1xuICB9KTtcbn0pIiwiY29uc3QgcHJlYWN0ID0gcmVxdWlyZSgncHJlYWN0JylcbmNvbnN0IGggPSBwcmVhY3QuaFxuY29uc3QgQ29tcG9uZW50ID0gcHJlYWN0LkNvbXBvbmVudFxuXG5jbGFzcyBTZWFyY2ggZXh0ZW5kcyBDb21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKVxuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHF1ZXJ5OiAnJyxcbiAgICAgIGRhdGE6IHt9LFxuICAgICAgZmFjZXRzOiBbXVxuICAgIH1cblxuICAgIHRoaXMubm9ybWFsaXplcnMgPSB7XG4gICAgICAnbmFtZSc6IGRhdGEgPT4gZGF0YSxcbiAgICAgICdwaG9uZSc6IGRhdGEgPT4gZGF0YSAmJiBkYXRhLnJlcGxhY2UoLyhcXCgqLSpcXCkqXFxzKikvZywgJycpLFxuICAgICAgJ2xvY2F0aW9uLm5hbWUnOiBkYXRhID0+IGRhdGFcbiAgICB9XG5cbiAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpXG4gIH1cblxuICBub3JtYWxpemUobmFtZSwgZGF0YSkge1xuICAgIHJldHVybiB0aGlzLm5vcm1hbGl6ZXJzW25hbWVdKGRhdGEpXG4gIH1cblxuICBnZXRLZXkoaXRlbSwga2V5KSB7XG4gICAgbGV0IHJvb3QgPSBpdGVtXG4gICAgY29uc3QgcGFydHMgPSBrZXkuc3BsaXQoJy4nKVxuICAgIHdoaWxlIChwYXJ0cy5sZW5ndGgpIHtcbiAgICAgIHJvb3QgPSByb290W3BhcnRzLnNoaWZ0KCldXG4gICAgfVxuICAgIHJldHVybiByb290XG4gIH1cblxuICBjcmVhdGVGYWNldHMoZW50aXR5VHlwZXMpIHtcbiAgICAvLyBTdG9yZSBhbGwgc2VhcmNoYWJsZSB2YWx1ZXNcbiAgICBjb25zdCBmYWNldHMgPSBbXVxuXG4gICAgLy8gR2V0IHRoZSBzZWFyY2hhYmxlIGtleXMgb24gZWFjaCBlbnRpdHlcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcy5ub3JtYWxpemVycylcblxuICAgIC8vIExvb3AgdGhyb3VnaCBlYWNoIGVudGl0eSBhbmQgY29sbGVjdCBzZWFyY2hhYmxlIHZhbHVlc1xuICAgIGVudGl0eVR5cGVzLmZvckVhY2goZW50aXR5VHlwZSA9PiB7XG4gICAgICBlbnRpdHlUeXBlLmRhdGEuZm9yRWFjaChlbnRpdHkgPT4ge1xuICAgICAgICBrZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICBjb25zdCBzZWFyY2hhYmxlID0gdGhpcy5ub3JtYWxpemUoa2V5LCB0aGlzLmdldEtleShlbnRpdHksIGtleSkpXG5cbiAgICAgICAgICBpZiAoc2VhcmNoYWJsZSkge1xuICAgICAgICAgICAgZmFjZXRzLnB1c2goe1xuICAgICAgICAgICAgICBrZXk6IHNlYXJjaGFibGUsXG4gICAgICAgICAgICAgIHVpZDogYCR7ZW50aXR5VHlwZS50eXBlfToke2VudGl0eS51aWR9YFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH0pXG5cbiAgICByZXR1cm4gZmFjZXRzXG4gIH1cblxuICBjcmVhdGVNYXAoZW50aXR5VHlwZXMpIHtcbiAgICBjb25zdCBkYXRhID0ge31cbiAgICBlbnRpdHlUeXBlcy5mb3JFYWNoKGVudGl0eVR5cGUgPT4ge1xuICAgICAgLy8gQ3JlYXRlIHRoZSBpbmRleCBmb3IgdGhpcyBlbnRpdHkgdHlwZVxuICAgICAgZGF0YVtlbnRpdHlUeXBlLnR5cGVdID0gZGF0YVtlbnRpdHlUeXBlLnR5cGVdIHx8IHt9XG5cbiAgICAgIC8vIEZpbGwgdGhlIGluZGV4IHdpdGggZWFjaCB1bmlxdWUgZW50aXR5XG4gICAgICBlbnRpdHlUeXBlLmRhdGEuZm9yRWFjaChlbnRpdHkgPT4ge1xuICAgICAgICBkYXRhW2VudGl0eVR5cGUudHlwZV1bZW50aXR5LnVpZF0gPSBlbnRpdHlcbiAgICAgIH0pXG4gICAgfSlcbiAgICByZXR1cm4gZGF0YVxuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpc1xuICAgIC5sb2FkKClcbiAgICAudGhlbihlbnRpdHlUeXBlcyA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5jcmVhdGVNYXAoZW50aXR5VHlwZXMpXG4gICAgICBjb25zdCBmYWNldHMgPSB0aGlzLmNyZWF0ZUZhY2V0cyhlbnRpdHlUeXBlcylcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBkYXRhLCBmYWNldHMgfSlcbiAgICB9KVxuICB9XG5cbiAgb25DaGFuZ2UoZXZlbnQpIHtcbiAgICB0aGlzLnNldFN0YXRlKHsgcXVlcnk6IGV2ZW50LnRhcmdldC52YWx1ZSB9KVxuICB9XG5cbiAgbG9hZCgpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoW1xuICAgICAgJy9kYXRhL2MyMV9wcm9wZXJ0eS5qc29uJyxcbiAgICAgICcvZGF0YS9ob25fY2hhcml0eS5qc29uJyxcbiAgICAgICcvZGF0YS9ob25faW50ZXJ2aWV3ZWUuanNvbicsXG4gICAgICAnL2RhdGEvdmVzX2dyYWR1YXRlLmpzb24nLFxuICAgICAgJy9kYXRhL3JlbWF4X3Byb3BlcnR5Lmpzb24nXG4gICAgXS5tYXAoYXN5bmMgZGF0YSA9PiB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGRhdGEpXG4gICAgICByZXR1cm4gYXdhaXQgcmVzcG9uc2UuanNvbigpXG4gICAgfSkpXG4gIH1cblxuICBkZWR1cGUoYXJyLCBrZXkpIHtcbiAgICByZXR1cm4gYXJyLmZpbHRlcigobywgaSwgYXJyKSA9PiBhcnIuZmluZEluZGV4KHQgPT4gdFtrZXldID09PSBvW2tleV0pID09PSBpKVxuICB9XG5cbiAgaXRlbUZyb21VSUQodWlkKSB7XG4gICAgY29uc3QgcGFydHMgPSB1aWQuc3BsaXQoJzonKVxuICAgIGNvbnN0IGVudGl0eVR5cGUgPSBwYXJ0cy5zaGlmdCgpXG4gICAgY29uc3QgZW50aXR5SWQgPSBwYXJ0cy5zaGlmdCgpXG5cbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5kYXRhW2VudGl0eVR5cGVdW2VudGl0eUlkXVxuICB9XG5cbiAgcXVlcnkobikge1xuICAgIGNvbnN0IG11bHRpID0gdGhpcy5zdGF0ZS5xdWVyeS5zcGxpdCgnICcpXG4gICAgY29uc3Qgb2NjdXJlbmNlcyA9IHt9XG4gICAgY29uc3QgcmVzdWx0cyA9IFtdXG4gICAgXG4gICAgd2hpbGUgKG11bHRpLmxlbmd0aCkge1xuICAgICAgY29uc3QgbmV4dCA9IG11bHRpLnNoaWZ0KClcbiAgICAgIHJlc3VsdHMucHVzaC5hcHBseShcbiAgICAgICAgcmVzdWx0cyxcbiAgICAgICAgdGhpc1xuICAgICAgICAuc3RhdGVcbiAgICAgICAgLmZhY2V0c1xuICAgICAgICAuZmlsdGVyKGYgPT4gZi5rZXkudG9Mb3dlckNhc2UoKS5pbmRleE9mKG5leHQpID4gLTEpXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGEgbWFwIHRvIHNvcnQgcmVzdWx0cyBieSAjIG9mIG1hdGNoZXNcbiAgICByZXN1bHRzXG4gICAgLmZvckVhY2gocmVzdWx0ID0+IHtcbiAgICAgIG9jY3VyZW5jZXNbcmVzdWx0LnVpZF0gPSBvY2N1cmVuY2VzW3Jlc3VsdC51aWRdIHx8IDBcbiAgICAgIG9jY3VyZW5jZXNbcmVzdWx0LnVpZF0rK1xuICAgIH0pXG5cbiAgICByZXR1cm4gKFxuICAgICAgdGhpc1xuICAgICAgLmRlZHVwZShcbiAgICAgICAgcmVzdWx0c1xuICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gb2NjdXJlbmNlc1tpdGVtLnVpZF0gPiBtdWx0aS5sZW5ndGgpXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBvY2N1cmVuY2VzW2IudWlkXSAtIG9jY3VyZW5jZXNbYS51aWRdKSxcbiAgICAgICAgJ3VpZCdcbiAgICAgIClcbiAgICAgIC5tYXAoaXRlbSA9PiB7IGNvbnNvbGUubG9nKGl0ZW0pOyByZXR1cm4gaXRlbTsgfSlcbiAgICAgIC5zbGljZSgwLCBuKVxuICAgICAgLm1hcChyZXN1bHQgPT4gdGhpcy5pdGVtRnJvbVVJRChyZXN1bHQudWlkKSlcbiAgICApXG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgcmVzdWx0cyA9IHRoaXMuc3RhdGUucXVlcnkgPyB0aGlzLnF1ZXJ5KDI1KS5tYXAoaXRlbSA9PiB7XG4gICAgICBjb25zdCBzcmMgPSAhIWl0ZW0uaW1hZ2VcbiAgICAgICAgPyBpdGVtLmltYWdlXG4gICAgICAgIDogISFpdGVtLmltYWdlc1xuICAgICAgICAgID8gaXRlbS5pbWFnZXNbMF1cbiAgICAgICAgICA6IG51bGxcbiAgICAgIGNvbnN0IGhyZWYgPSAhIWl0ZW0udXJsXG4gICAgICAgID8gaXRlbS51cmxcbiAgICAgICAgOiBudWxsXG4gICAgICBjb25zdCBwaG9uZSA9ICEhaXRlbS5waG9uZVxuICAgICAgICA/IGl0ZW0ucGhvbmVcbiAgICAgICAgOiBudWxsXG4gICAgICBjb25zdCBwcmljZSA9ICEhaXRlbS5wcmljZVxuICAgICAgICA/IGl0ZW0ucHJpY2VcbiAgICAgICAgOiBudWxsXG4gICAgICBjb25zdCBsb2NhdGlvbiA9ICEhaXRlbS5sb2NhdGlvblxuICAgICAgICA/IGl0ZW0ubG9jYXRpb25cbiAgICAgICAgOiBudWxsXG4gICAgICBjb25zdCBsb2NhdGlvbk5hbWUgPSAhIWxvY2F0aW9uXG4gICAgICAgID8gbG9jYXRpb24ubmFtZVxuICAgICAgICA6IG51bGxcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgaCgnZGl2JywgeyBjbGFzc05hbWU6ICdzZWFyY2hfX3Jlc3VsdCcgfSwgXG4gICAgICAgICAgaCgnYScsIHsgaHJlZiwgdGFyZ2V0OiAnX2JsYW5rJyB9LCBbXG4gICAgICAgICAgICBzcmMgPyBoKCdkaXYnLCB7IGNsYXNzTmFtZTogJ3NlYXJjaF9faW1hZ2UnLCBzdHlsZTogeyBiYWNrZ3JvdW5kSW1hZ2U6IGB1cmwoJHtzcmN9KWAgfSB9KSA6IG51bGwsXG4gICAgICAgICAgICBwcmljZVxuICAgICAgICAgICAgICA/IGgoJ2RpdicsIHsgY2xhc3NOYW1lOiAnc2VhcmNoX19wcmljZScgfSwgYCQke051bWJlcihwcmljZSkudG9Mb2NhbGVTdHJpbmcoKX1gKVxuICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICBoKCdoMycsIG51bGwsIGl0ZW0ubmFtZSksXG4gICAgICAgICAgICBwaG9uZVxuICAgICAgICAgICAgICA/IGhyZWZcbiAgICAgICAgICAgICAgICA/IGgoJ2RpdicsIHsgY2xhc3NOYW1lOiAnc2VhcmNoX19waG9uZScgfSwgcGhvbmUpXG4gICAgICAgICAgICAgICAgOiBoKCdhJywgeyBocmVmOiBgdGVsOiR7cGhvbmV9YCB9LCBoKCdkaXYnLCB7IGNsYXNzTmFtZTogJ3NlYXJjaF9fcGhvbmUnIH0sIHBob25lKSlcbiAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgbG9jYXRpb25OYW1lXG4gICAgICAgICAgICAgID8gaCgnZGl2JywgeyBjbGFzc05hbWU6ICdzZWFyY2hfX2xvY2F0aW9uJyB9LCBsb2NhdGlvbk5hbWUpXG4gICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICBdKVxuICAgICAgICApXG4gICAgICApXG4gICAgfSkgOiBudWxsXG5cbiAgICByZXR1cm4gKFxuICAgICAgaCgnZGl2JywgbnVsbCwgW1xuICAgICAgICBoKCdkaXYnLCB7IGNsYXNzTmFtZTogJ2ZpZWxkIHNlYXJjaF9fZmllbGQgJ30sIFtcbiAgICAgICAgICBoKCdzdmcnLCB7IGNsYXNzTmFtZTogJ3NlYXJjaF9faWNvbicsIHhtbG5zOiAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCB2aWV3Qm94OiAnMCAwIDIwIDIwJyB9LCBbIGgoJ3BhdGgnLCB7IGQ6ICdNMTIuOSAxNC4zMmE4IDggMCAxIDEgMS40MS0xLjQxbDUuMzUgNS4zMy0xLjQyIDEuNDItNS4zMy01LjM0ek04IDE0QTYgNiAwIDEgMCA4IDJhNiA2IDAgMCAwIDAgMTJ6JyB9KSBdKSxcbiAgICAgICAgICBoKCdpbnB1dCcsIHsgdmFsdWU6IHRoaXMuc3RhdGUucXVlcnksIGNsYXNzTmFtZTogJ2ZpZWxkX19pbnB1dCcsIGlkOiAnc2VhcmNoJywgdHlwZTogJ3RleHQnLCBuYW1lOiAnc2VhcmNoJywgcGxhY2Vob2xkZXI6ICdXaGF0IGFyZSB5b3UgbG9va2luZyBmb3I/Jywgb25JbnB1dDogdGhpcy5vbkNoYW5nZSB9KVxuICAgICAgICBdKSxcbiAgICAgICAgIXRoaXMuc3RhdGUucXVlcnkgPyBoKCdkaXYnLCB7IGNsYXNzTmFtZTogJ3NlYXJjaF9fc3VnZ2VzdGlvbnMnIH0sICdZb3UgY291bGQgdHJ5IGxvb2tpbmcgZm9yIHBlb3BsZSwgcHJvcGVydGllcyBvciBjaGFyaXRpZXMuJykgOiBudWxsLFxuICAgICAgICBoKCdkaXYnLCB7IGNsYXNzTmFtZTogJ3NlYXJjaF9fcmVzdWx0cycgfSwgcmVzdWx0cylcbiAgICAgIF0pXG4gICAgKVxuICB9XG59XG5cbnByZWFjdC5yZW5kZXIoaChTZWFyY2gpLCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc2VhcmNoJykpIiwiIWZ1bmN0aW9uKCkge1xuICAgICd1c2Ugc3RyaWN0JztcbiAgICBmdW5jdGlvbiBoKG5vZGVOYW1lLCBhdHRyaWJ1dGVzKSB7XG4gICAgICAgIHZhciBsYXN0U2ltcGxlLCBjaGlsZCwgc2ltcGxlLCBpLCBjaGlsZHJlbiA9IEVNUFRZX0NISUxEUkVOO1xuICAgICAgICBmb3IgKGkgPSBhcmd1bWVudHMubGVuZ3RoOyBpLS0gPiAyOyApIHN0YWNrLnB1c2goYXJndW1lbnRzW2ldKTtcbiAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiYgbnVsbCAhPSBhdHRyaWJ1dGVzLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICBpZiAoIXN0YWNrLmxlbmd0aCkgc3RhY2sucHVzaChhdHRyaWJ1dGVzLmNoaWxkcmVuKTtcbiAgICAgICAgICAgIGRlbGV0ZSBhdHRyaWJ1dGVzLmNoaWxkcmVuO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGgpIGlmICgoY2hpbGQgPSBzdGFjay5wb3AoKSkgJiYgdm9pZCAwICE9PSBjaGlsZC5wb3ApIGZvciAoaSA9IGNoaWxkLmxlbmd0aDsgaS0tOyApIHN0YWNrLnB1c2goY2hpbGRbaV0pOyBlbHNlIHtcbiAgICAgICAgICAgIGlmICgnYm9vbGVhbicgPT0gdHlwZW9mIGNoaWxkKSBjaGlsZCA9IG51bGw7XG4gICAgICAgICAgICBpZiAoc2ltcGxlID0gJ2Z1bmN0aW9uJyAhPSB0eXBlb2Ygbm9kZU5hbWUpIGlmIChudWxsID09IGNoaWxkKSBjaGlsZCA9ICcnOyBlbHNlIGlmICgnbnVtYmVyJyA9PSB0eXBlb2YgY2hpbGQpIGNoaWxkID0gU3RyaW5nKGNoaWxkKTsgZWxzZSBpZiAoJ3N0cmluZycgIT0gdHlwZW9mIGNoaWxkKSBzaW1wbGUgPSAhMTtcbiAgICAgICAgICAgIGlmIChzaW1wbGUgJiYgbGFzdFNpbXBsZSkgY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0gKz0gY2hpbGQ7IGVsc2UgaWYgKGNoaWxkcmVuID09PSBFTVBUWV9DSElMRFJFTikgY2hpbGRyZW4gPSBbIGNoaWxkIF07IGVsc2UgY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICAgICAgICBsYXN0U2ltcGxlID0gc2ltcGxlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwID0gbmV3IFZOb2RlKCk7XG4gICAgICAgIHAubm9kZU5hbWUgPSBub2RlTmFtZTtcbiAgICAgICAgcC5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgICAgICBwLmF0dHJpYnV0ZXMgPSBudWxsID09IGF0dHJpYnV0ZXMgPyB2b2lkIDAgOiBhdHRyaWJ1dGVzO1xuICAgICAgICBwLmtleSA9IG51bGwgPT0gYXR0cmlidXRlcyA/IHZvaWQgMCA6IGF0dHJpYnV0ZXMua2V5O1xuICAgICAgICBpZiAodm9pZCAwICE9PSBvcHRpb25zLnZub2RlKSBvcHRpb25zLnZub2RlKHApO1xuICAgICAgICByZXR1cm4gcDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZXh0ZW5kKG9iaiwgcHJvcHMpIHtcbiAgICAgICAgZm9yICh2YXIgaSBpbiBwcm9wcykgb2JqW2ldID0gcHJvcHNbaV07XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFwcGx5UmVmKHJlZiwgdmFsdWUpIHtcbiAgICAgICAgaWYgKG51bGwgIT0gcmVmKSBpZiAoJ2Z1bmN0aW9uJyA9PSB0eXBlb2YgcmVmKSByZWYodmFsdWUpOyBlbHNlIHJlZi5jdXJyZW50ID0gdmFsdWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNsb25lRWxlbWVudCh2bm9kZSwgcHJvcHMpIHtcbiAgICAgICAgcmV0dXJuIGgodm5vZGUubm9kZU5hbWUsIGV4dGVuZChleHRlbmQoe30sIHZub2RlLmF0dHJpYnV0ZXMpLCBwcm9wcyksIGFyZ3VtZW50cy5sZW5ndGggPiAyID8gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpIDogdm5vZGUuY2hpbGRyZW4pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBlbnF1ZXVlUmVuZGVyKGNvbXBvbmVudCkge1xuICAgICAgICBpZiAoIWNvbXBvbmVudC5fX2QgJiYgKGNvbXBvbmVudC5fX2QgPSAhMCkgJiYgMSA9PSBpdGVtcy5wdXNoKGNvbXBvbmVudCkpIChvcHRpb25zLmRlYm91bmNlUmVuZGVyaW5nIHx8IGRlZmVyKShyZXJlbmRlcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlcmVuZGVyKCkge1xuICAgICAgICB2YXIgcDtcbiAgICAgICAgd2hpbGUgKHAgPSBpdGVtcy5wb3AoKSkgaWYgKHAuX19kKSByZW5kZXJDb21wb25lbnQocCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzU2FtZU5vZGVUeXBlKG5vZGUsIHZub2RlLCBoeWRyYXRpbmcpIHtcbiAgICAgICAgaWYgKCdzdHJpbmcnID09IHR5cGVvZiB2bm9kZSB8fCAnbnVtYmVyJyA9PSB0eXBlb2Ygdm5vZGUpIHJldHVybiB2b2lkIDAgIT09IG5vZGUuc3BsaXRUZXh0O1xuICAgICAgICBpZiAoJ3N0cmluZycgPT0gdHlwZW9mIHZub2RlLm5vZGVOYW1lKSByZXR1cm4gIW5vZGUuX2NvbXBvbmVudENvbnN0cnVjdG9yICYmIGlzTmFtZWROb2RlKG5vZGUsIHZub2RlLm5vZGVOYW1lKTsgZWxzZSByZXR1cm4gaHlkcmF0aW5nIHx8IG5vZGUuX2NvbXBvbmVudENvbnN0cnVjdG9yID09PSB2bm9kZS5ub2RlTmFtZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNOYW1lZE5vZGUobm9kZSwgbm9kZU5hbWUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUuX19uID09PSBub2RlTmFtZSB8fCBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldE5vZGVQcm9wcyh2bm9kZSkge1xuICAgICAgICB2YXIgcHJvcHMgPSBleHRlbmQoe30sIHZub2RlLmF0dHJpYnV0ZXMpO1xuICAgICAgICBwcm9wcy5jaGlsZHJlbiA9IHZub2RlLmNoaWxkcmVuO1xuICAgICAgICB2YXIgZGVmYXVsdFByb3BzID0gdm5vZGUubm9kZU5hbWUuZGVmYXVsdFByb3BzO1xuICAgICAgICBpZiAodm9pZCAwICE9PSBkZWZhdWx0UHJvcHMpIGZvciAodmFyIGkgaW4gZGVmYXVsdFByb3BzKSBpZiAodm9pZCAwID09PSBwcm9wc1tpXSkgcHJvcHNbaV0gPSBkZWZhdWx0UHJvcHNbaV07XG4gICAgICAgIHJldHVybiBwcm9wcztcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlTm9kZShub2RlTmFtZSwgaXNTdmcpIHtcbiAgICAgICAgdmFyIG5vZGUgPSBpc1N2ZyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCBub2RlTmFtZSkgOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KG5vZGVOYW1lKTtcbiAgICAgICAgbm9kZS5fX24gPSBub2RlTmFtZTtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbW92ZU5vZGUobm9kZSkge1xuICAgICAgICB2YXIgcGFyZW50Tm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICAgICAgaWYgKHBhcmVudE5vZGUpIHBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNldEFjY2Vzc29yKG5vZGUsIG5hbWUsIG9sZCwgdmFsdWUsIGlzU3ZnKSB7XG4gICAgICAgIGlmICgnY2xhc3NOYW1lJyA9PT0gbmFtZSkgbmFtZSA9ICdjbGFzcyc7XG4gICAgICAgIGlmICgna2V5JyA9PT0gbmFtZSkgOyBlbHNlIGlmICgncmVmJyA9PT0gbmFtZSkge1xuICAgICAgICAgICAgYXBwbHlSZWYob2xkLCBudWxsKTtcbiAgICAgICAgICAgIGFwcGx5UmVmKHZhbHVlLCBub2RlKTtcbiAgICAgICAgfSBlbHNlIGlmICgnY2xhc3MnID09PSBuYW1lICYmICFpc1N2Zykgbm9kZS5jbGFzc05hbWUgPSB2YWx1ZSB8fCAnJzsgZWxzZSBpZiAoJ3N0eWxlJyA9PT0gbmFtZSkge1xuICAgICAgICAgICAgaWYgKCF2YWx1ZSB8fCAnc3RyaW5nJyA9PSB0eXBlb2YgdmFsdWUgfHwgJ3N0cmluZycgPT0gdHlwZW9mIG9sZCkgbm9kZS5zdHlsZS5jc3NUZXh0ID0gdmFsdWUgfHwgJyc7XG4gICAgICAgICAgICBpZiAodmFsdWUgJiYgJ29iamVjdCcgPT0gdHlwZW9mIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCdzdHJpbmcnICE9IHR5cGVvZiBvbGQpIGZvciAodmFyIGkgaW4gb2xkKSBpZiAoIShpIGluIHZhbHVlKSkgbm9kZS5zdHlsZVtpXSA9ICcnO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgaW4gdmFsdWUpIG5vZGUuc3R5bGVbaV0gPSAnbnVtYmVyJyA9PSB0eXBlb2YgdmFsdWVbaV0gJiYgITEgPT09IElTX05PTl9ESU1FTlNJT05BTC50ZXN0KGkpID8gdmFsdWVbaV0gKyAncHgnIDogdmFsdWVbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoJ2Rhbmdlcm91c2x5U2V0SW5uZXJIVE1MJyA9PT0gbmFtZSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlKSBub2RlLmlubmVySFRNTCA9IHZhbHVlLl9faHRtbCB8fCAnJztcbiAgICAgICAgfSBlbHNlIGlmICgnbycgPT0gbmFtZVswXSAmJiAnbicgPT0gbmFtZVsxXSkge1xuICAgICAgICAgICAgdmFyIHVzZUNhcHR1cmUgPSBuYW1lICE9PSAobmFtZSA9IG5hbWUucmVwbGFjZSgvQ2FwdHVyZSQvLCAnJykpO1xuICAgICAgICAgICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKS5zdWJzdHJpbmcoMik7XG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIW9sZCkgbm9kZS5hZGRFdmVudExpc3RlbmVyKG5hbWUsIGV2ZW50UHJveHksIHVzZUNhcHR1cmUpO1xuICAgICAgICAgICAgfSBlbHNlIG5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihuYW1lLCBldmVudFByb3h5LCB1c2VDYXB0dXJlKTtcbiAgICAgICAgICAgIChub2RlLl9fbCB8fCAobm9kZS5fX2wgPSB7fSkpW25hbWVdID0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAoJ2xpc3QnICE9PSBuYW1lICYmICd0eXBlJyAhPT0gbmFtZSAmJiAhaXNTdmcgJiYgbmFtZSBpbiBub2RlKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIG5vZGVbbmFtZV0gPSBudWxsID09IHZhbHVlID8gJycgOiB2YWx1ZTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgICAgICBpZiAoKG51bGwgPT0gdmFsdWUgfHwgITEgPT09IHZhbHVlKSAmJiAnc3BlbGxjaGVjaycgIT0gbmFtZSkgbm9kZS5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgbnMgPSBpc1N2ZyAmJiBuYW1lICE9PSAobmFtZSA9IG5hbWUucmVwbGFjZSgvXnhsaW5rOj8vLCAnJykpO1xuICAgICAgICAgICAgaWYgKG51bGwgPT0gdmFsdWUgfHwgITEgPT09IHZhbHVlKSBpZiAobnMpIG5vZGUucmVtb3ZlQXR0cmlidXRlTlMoJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnLCBuYW1lLnRvTG93ZXJDYXNlKCkpOyBlbHNlIG5vZGUucmVtb3ZlQXR0cmlidXRlKG5hbWUpOyBlbHNlIGlmICgnZnVuY3Rpb24nICE9IHR5cGVvZiB2YWx1ZSkgaWYgKG5zKSBub2RlLnNldEF0dHJpYnV0ZU5TKCdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJywgbmFtZS50b0xvd2VyQ2FzZSgpLCB2YWx1ZSk7IGVsc2Ugbm9kZS5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGV2ZW50UHJveHkoZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2xbZS50eXBlXShvcHRpb25zLmV2ZW50ICYmIG9wdGlvbnMuZXZlbnQoZSkgfHwgZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZsdXNoTW91bnRzKCkge1xuICAgICAgICB2YXIgYztcbiAgICAgICAgd2hpbGUgKGMgPSBtb3VudHMuc2hpZnQoKSkge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuYWZ0ZXJNb3VudCkgb3B0aW9ucy5hZnRlck1vdW50KGMpO1xuICAgICAgICAgICAgaWYgKGMuY29tcG9uZW50RGlkTW91bnQpIGMuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBkaWZmKGRvbSwgdm5vZGUsIGNvbnRleHQsIG1vdW50QWxsLCBwYXJlbnQsIGNvbXBvbmVudFJvb3QpIHtcbiAgICAgICAgaWYgKCFkaWZmTGV2ZWwrKykge1xuICAgICAgICAgICAgaXNTdmdNb2RlID0gbnVsbCAhPSBwYXJlbnQgJiYgdm9pZCAwICE9PSBwYXJlbnQub3duZXJTVkdFbGVtZW50O1xuICAgICAgICAgICAgaHlkcmF0aW5nID0gbnVsbCAhPSBkb20gJiYgISgnX19wcmVhY3RhdHRyXycgaW4gZG9tKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmV0ID0gaWRpZmYoZG9tLCB2bm9kZSwgY29udGV4dCwgbW91bnRBbGwsIGNvbXBvbmVudFJvb3QpO1xuICAgICAgICBpZiAocGFyZW50ICYmIHJldC5wYXJlbnROb2RlICE9PSBwYXJlbnQpIHBhcmVudC5hcHBlbmRDaGlsZChyZXQpO1xuICAgICAgICBpZiAoIS0tZGlmZkxldmVsKSB7XG4gICAgICAgICAgICBoeWRyYXRpbmcgPSAhMTtcbiAgICAgICAgICAgIGlmICghY29tcG9uZW50Um9vdCkgZmx1c2hNb3VudHMoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBpZGlmZihkb20sIHZub2RlLCBjb250ZXh0LCBtb3VudEFsbCwgY29tcG9uZW50Um9vdCkge1xuICAgICAgICB2YXIgb3V0ID0gZG9tLCBwcmV2U3ZnTW9kZSA9IGlzU3ZnTW9kZTtcbiAgICAgICAgaWYgKG51bGwgPT0gdm5vZGUgfHwgJ2Jvb2xlYW4nID09IHR5cGVvZiB2bm9kZSkgdm5vZGUgPSAnJztcbiAgICAgICAgaWYgKCdzdHJpbmcnID09IHR5cGVvZiB2bm9kZSB8fCAnbnVtYmVyJyA9PSB0eXBlb2Ygdm5vZGUpIHtcbiAgICAgICAgICAgIGlmIChkb20gJiYgdm9pZCAwICE9PSBkb20uc3BsaXRUZXh0ICYmIGRvbS5wYXJlbnROb2RlICYmICghZG9tLl9jb21wb25lbnQgfHwgY29tcG9uZW50Um9vdCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoZG9tLm5vZGVWYWx1ZSAhPSB2bm9kZSkgZG9tLm5vZGVWYWx1ZSA9IHZub2RlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvdXQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh2bm9kZSk7XG4gICAgICAgICAgICAgICAgaWYgKGRvbSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZG9tLnBhcmVudE5vZGUpIGRvbS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChvdXQsIGRvbSk7XG4gICAgICAgICAgICAgICAgICAgIHJlY29sbGVjdE5vZGVUcmVlKGRvbSwgITApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dC5fX3ByZWFjdGF0dHJfID0gITA7XG4gICAgICAgICAgICByZXR1cm4gb3V0O1xuICAgICAgICB9XG4gICAgICAgIHZhciB2bm9kZU5hbWUgPSB2bm9kZS5ub2RlTmFtZTtcbiAgICAgICAgaWYgKCdmdW5jdGlvbicgPT0gdHlwZW9mIHZub2RlTmFtZSkgcmV0dXJuIGJ1aWxkQ29tcG9uZW50RnJvbVZOb2RlKGRvbSwgdm5vZGUsIGNvbnRleHQsIG1vdW50QWxsKTtcbiAgICAgICAgaXNTdmdNb2RlID0gJ3N2ZycgPT09IHZub2RlTmFtZSA/ICEwIDogJ2ZvcmVpZ25PYmplY3QnID09PSB2bm9kZU5hbWUgPyAhMSA6IGlzU3ZnTW9kZTtcbiAgICAgICAgdm5vZGVOYW1lID0gU3RyaW5nKHZub2RlTmFtZSk7XG4gICAgICAgIGlmICghZG9tIHx8ICFpc05hbWVkTm9kZShkb20sIHZub2RlTmFtZSkpIHtcbiAgICAgICAgICAgIG91dCA9IGNyZWF0ZU5vZGUodm5vZGVOYW1lLCBpc1N2Z01vZGUpO1xuICAgICAgICAgICAgaWYgKGRvbSkge1xuICAgICAgICAgICAgICAgIHdoaWxlIChkb20uZmlyc3RDaGlsZCkgb3V0LmFwcGVuZENoaWxkKGRvbS5maXJzdENoaWxkKTtcbiAgICAgICAgICAgICAgICBpZiAoZG9tLnBhcmVudE5vZGUpIGRvbS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChvdXQsIGRvbSk7XG4gICAgICAgICAgICAgICAgcmVjb2xsZWN0Tm9kZVRyZWUoZG9tLCAhMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGZjID0gb3V0LmZpcnN0Q2hpbGQsIHByb3BzID0gb3V0Ll9fcHJlYWN0YXR0cl8sIHZjaGlsZHJlbiA9IHZub2RlLmNoaWxkcmVuO1xuICAgICAgICBpZiAobnVsbCA9PSBwcm9wcykge1xuICAgICAgICAgICAgcHJvcHMgPSBvdXQuX19wcmVhY3RhdHRyXyA9IHt9O1xuICAgICAgICAgICAgZm9yICh2YXIgYSA9IG91dC5hdHRyaWJ1dGVzLCBpID0gYS5sZW5ndGg7IGktLTsgKSBwcm9wc1thW2ldLm5hbWVdID0gYVtpXS52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWh5ZHJhdGluZyAmJiB2Y2hpbGRyZW4gJiYgMSA9PT0gdmNoaWxkcmVuLmxlbmd0aCAmJiAnc3RyaW5nJyA9PSB0eXBlb2YgdmNoaWxkcmVuWzBdICYmIG51bGwgIT0gZmMgJiYgdm9pZCAwICE9PSBmYy5zcGxpdFRleHQgJiYgbnVsbCA9PSBmYy5uZXh0U2libGluZykge1xuICAgICAgICAgICAgaWYgKGZjLm5vZGVWYWx1ZSAhPSB2Y2hpbGRyZW5bMF0pIGZjLm5vZGVWYWx1ZSA9IHZjaGlsZHJlblswXTtcbiAgICAgICAgfSBlbHNlIGlmICh2Y2hpbGRyZW4gJiYgdmNoaWxkcmVuLmxlbmd0aCB8fCBudWxsICE9IGZjKSBpbm5lckRpZmZOb2RlKG91dCwgdmNoaWxkcmVuLCBjb250ZXh0LCBtb3VudEFsbCwgaHlkcmF0aW5nIHx8IG51bGwgIT0gcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwpO1xuICAgICAgICBkaWZmQXR0cmlidXRlcyhvdXQsIHZub2RlLmF0dHJpYnV0ZXMsIHByb3BzKTtcbiAgICAgICAgaXNTdmdNb2RlID0gcHJldlN2Z01vZGU7XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlubmVyRGlmZk5vZGUoZG9tLCB2Y2hpbGRyZW4sIGNvbnRleHQsIG1vdW50QWxsLCBpc0h5ZHJhdGluZykge1xuICAgICAgICB2YXIgaiwgYywgZiwgdmNoaWxkLCBjaGlsZCwgb3JpZ2luYWxDaGlsZHJlbiA9IGRvbS5jaGlsZE5vZGVzLCBjaGlsZHJlbiA9IFtdLCBrZXllZCA9IHt9LCBrZXllZExlbiA9IDAsIG1pbiA9IDAsIGxlbiA9IG9yaWdpbmFsQ2hpbGRyZW4ubGVuZ3RoLCBjaGlsZHJlbkxlbiA9IDAsIHZsZW4gPSB2Y2hpbGRyZW4gPyB2Y2hpbGRyZW4ubGVuZ3RoIDogMDtcbiAgICAgICAgaWYgKDAgIT09IGxlbikgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgdmFyIF9jaGlsZCA9IG9yaWdpbmFsQ2hpbGRyZW5baV0sIHByb3BzID0gX2NoaWxkLl9fcHJlYWN0YXR0cl8sIGtleSA9IHZsZW4gJiYgcHJvcHMgPyBfY2hpbGQuX2NvbXBvbmVudCA/IF9jaGlsZC5fY29tcG9uZW50Ll9fayA6IHByb3BzLmtleSA6IG51bGw7XG4gICAgICAgICAgICBpZiAobnVsbCAhPSBrZXkpIHtcbiAgICAgICAgICAgICAgICBrZXllZExlbisrO1xuICAgICAgICAgICAgICAgIGtleWVkW2tleV0gPSBfY2hpbGQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHByb3BzIHx8ICh2b2lkIDAgIT09IF9jaGlsZC5zcGxpdFRleHQgPyBpc0h5ZHJhdGluZyA/IF9jaGlsZC5ub2RlVmFsdWUudHJpbSgpIDogITAgOiBpc0h5ZHJhdGluZykpIGNoaWxkcmVuW2NoaWxkcmVuTGVuKytdID0gX2NoaWxkO1xuICAgICAgICB9XG4gICAgICAgIGlmICgwICE9PSB2bGVuKSBmb3IgKHZhciBpID0gMDsgaSA8IHZsZW47IGkrKykge1xuICAgICAgICAgICAgdmNoaWxkID0gdmNoaWxkcmVuW2ldO1xuICAgICAgICAgICAgY2hpbGQgPSBudWxsO1xuICAgICAgICAgICAgdmFyIGtleSA9IHZjaGlsZC5rZXk7XG4gICAgICAgICAgICBpZiAobnVsbCAhPSBrZXkpIHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5ZWRMZW4gJiYgdm9pZCAwICE9PSBrZXllZFtrZXldKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkID0ga2V5ZWRba2V5XTtcbiAgICAgICAgICAgICAgICAgICAga2V5ZWRba2V5XSA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgICAgICAga2V5ZWRMZW4tLTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1pbiA8IGNoaWxkcmVuTGVuKSBmb3IgKGogPSBtaW47IGogPCBjaGlsZHJlbkxlbjsgaisrKSBpZiAodm9pZCAwICE9PSBjaGlsZHJlbltqXSAmJiBpc1NhbWVOb2RlVHlwZShjID0gY2hpbGRyZW5bal0sIHZjaGlsZCwgaXNIeWRyYXRpbmcpKSB7XG4gICAgICAgICAgICAgICAgY2hpbGQgPSBjO1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuW2pdID0gdm9pZCAwO1xuICAgICAgICAgICAgICAgIGlmIChqID09PSBjaGlsZHJlbkxlbiAtIDEpIGNoaWxkcmVuTGVuLS07XG4gICAgICAgICAgICAgICAgaWYgKGogPT09IG1pbikgbWluKys7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjaGlsZCA9IGlkaWZmKGNoaWxkLCB2Y2hpbGQsIGNvbnRleHQsIG1vdW50QWxsKTtcbiAgICAgICAgICAgIGYgPSBvcmlnaW5hbENoaWxkcmVuW2ldO1xuICAgICAgICAgICAgaWYgKGNoaWxkICYmIGNoaWxkICE9PSBkb20gJiYgY2hpbGQgIT09IGYpIGlmIChudWxsID09IGYpIGRvbS5hcHBlbmRDaGlsZChjaGlsZCk7IGVsc2UgaWYgKGNoaWxkID09PSBmLm5leHRTaWJsaW5nKSByZW1vdmVOb2RlKGYpOyBlbHNlIGRvbS5pbnNlcnRCZWZvcmUoY2hpbGQsIGYpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZXllZExlbikgZm9yICh2YXIgaSBpbiBrZXllZCkgaWYgKHZvaWQgMCAhPT0ga2V5ZWRbaV0pIHJlY29sbGVjdE5vZGVUcmVlKGtleWVkW2ldLCAhMSk7XG4gICAgICAgIHdoaWxlIChtaW4gPD0gY2hpbGRyZW5MZW4pIGlmICh2b2lkIDAgIT09IChjaGlsZCA9IGNoaWxkcmVuW2NoaWxkcmVuTGVuLS1dKSkgcmVjb2xsZWN0Tm9kZVRyZWUoY2hpbGQsICExKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVjb2xsZWN0Tm9kZVRyZWUobm9kZSwgdW5tb3VudE9ubHkpIHtcbiAgICAgICAgdmFyIGNvbXBvbmVudCA9IG5vZGUuX2NvbXBvbmVudDtcbiAgICAgICAgaWYgKGNvbXBvbmVudCkgdW5tb3VudENvbXBvbmVudChjb21wb25lbnQpOyBlbHNlIHtcbiAgICAgICAgICAgIGlmIChudWxsICE9IG5vZGUuX19wcmVhY3RhdHRyXykgYXBwbHlSZWYobm9kZS5fX3ByZWFjdGF0dHJfLnJlZiwgbnVsbCk7XG4gICAgICAgICAgICBpZiAoITEgPT09IHVubW91bnRPbmx5IHx8IG51bGwgPT0gbm9kZS5fX3ByZWFjdGF0dHJfKSByZW1vdmVOb2RlKG5vZGUpO1xuICAgICAgICAgICAgcmVtb3ZlQ2hpbGRyZW4obm9kZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcmVtb3ZlQ2hpbGRyZW4obm9kZSkge1xuICAgICAgICBub2RlID0gbm9kZS5sYXN0Q2hpbGQ7XG4gICAgICAgIHdoaWxlIChub2RlKSB7XG4gICAgICAgICAgICB2YXIgbmV4dCA9IG5vZGUucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICAgICAgcmVjb2xsZWN0Tm9kZVRyZWUobm9kZSwgITApO1xuICAgICAgICAgICAgbm9kZSA9IG5leHQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZGlmZkF0dHJpYnV0ZXMoZG9tLCBhdHRycywgb2xkKSB7XG4gICAgICAgIHZhciBuYW1lO1xuICAgICAgICBmb3IgKG5hbWUgaW4gb2xkKSBpZiAoKCFhdHRycyB8fCBudWxsID09IGF0dHJzW25hbWVdKSAmJiBudWxsICE9IG9sZFtuYW1lXSkgc2V0QWNjZXNzb3IoZG9tLCBuYW1lLCBvbGRbbmFtZV0sIG9sZFtuYW1lXSA9IHZvaWQgMCwgaXNTdmdNb2RlKTtcbiAgICAgICAgZm9yIChuYW1lIGluIGF0dHJzKSBpZiAoISgnY2hpbGRyZW4nID09PSBuYW1lIHx8ICdpbm5lckhUTUwnID09PSBuYW1lIHx8IG5hbWUgaW4gb2xkICYmIGF0dHJzW25hbWVdID09PSAoJ3ZhbHVlJyA9PT0gbmFtZSB8fCAnY2hlY2tlZCcgPT09IG5hbWUgPyBkb21bbmFtZV0gOiBvbGRbbmFtZV0pKSkgc2V0QWNjZXNzb3IoZG9tLCBuYW1lLCBvbGRbbmFtZV0sIG9sZFtuYW1lXSA9IGF0dHJzW25hbWVdLCBpc1N2Z01vZGUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVDb21wb25lbnQoQ3RvciwgcHJvcHMsIGNvbnRleHQpIHtcbiAgICAgICAgdmFyIGluc3QsIGkgPSByZWN5Y2xlckNvbXBvbmVudHMubGVuZ3RoO1xuICAgICAgICBpZiAoQ3Rvci5wcm90b3R5cGUgJiYgQ3Rvci5wcm90b3R5cGUucmVuZGVyKSB7XG4gICAgICAgICAgICBpbnN0ID0gbmV3IEN0b3IocHJvcHMsIGNvbnRleHQpO1xuICAgICAgICAgICAgQ29tcG9uZW50LmNhbGwoaW5zdCwgcHJvcHMsIGNvbnRleHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5zdCA9IG5ldyBDb21wb25lbnQocHJvcHMsIGNvbnRleHQpO1xuICAgICAgICAgICAgaW5zdC5jb25zdHJ1Y3RvciA9IEN0b3I7XG4gICAgICAgICAgICBpbnN0LnJlbmRlciA9IGRvUmVuZGVyO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChpLS0pIGlmIChyZWN5Y2xlckNvbXBvbmVudHNbaV0uY29uc3RydWN0b3IgPT09IEN0b3IpIHtcbiAgICAgICAgICAgIGluc3QuX19iID0gcmVjeWNsZXJDb21wb25lbnRzW2ldLl9fYjtcbiAgICAgICAgICAgIHJlY3ljbGVyQ29tcG9uZW50cy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICByZXR1cm4gaW5zdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5zdDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZG9SZW5kZXIocHJvcHMsIHN0YXRlLCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yKHByb3BzLCBjb250ZXh0KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2V0Q29tcG9uZW50UHJvcHMoY29tcG9uZW50LCBwcm9wcywgcmVuZGVyTW9kZSwgY29udGV4dCwgbW91bnRBbGwpIHtcbiAgICAgICAgaWYgKCFjb21wb25lbnQuX194KSB7XG4gICAgICAgICAgICBjb21wb25lbnQuX194ID0gITA7XG4gICAgICAgICAgICBjb21wb25lbnQuX19yID0gcHJvcHMucmVmO1xuICAgICAgICAgICAgY29tcG9uZW50Ll9fayA9IHByb3BzLmtleTtcbiAgICAgICAgICAgIGRlbGV0ZSBwcm9wcy5yZWY7XG4gICAgICAgICAgICBkZWxldGUgcHJvcHMua2V5O1xuICAgICAgICAgICAgaWYgKHZvaWQgMCA9PT0gY29tcG9uZW50LmNvbnN0cnVjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcykgaWYgKCFjb21wb25lbnQuYmFzZSB8fCBtb3VudEFsbCkge1xuICAgICAgICAgICAgICAgIGlmIChjb21wb25lbnQuY29tcG9uZW50V2lsbE1vdW50KSBjb21wb25lbnQuY29tcG9uZW50V2lsbE1vdW50KCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbXBvbmVudC5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKSBjb21wb25lbnQuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhwcm9wcywgY29udGV4dCk7XG4gICAgICAgICAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0ICE9PSBjb21wb25lbnQuY29udGV4dCkge1xuICAgICAgICAgICAgICAgIGlmICghY29tcG9uZW50Ll9fYykgY29tcG9uZW50Ll9fYyA9IGNvbXBvbmVudC5jb250ZXh0O1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghY29tcG9uZW50Ll9fcCkgY29tcG9uZW50Ll9fcCA9IGNvbXBvbmVudC5wcm9wcztcbiAgICAgICAgICAgIGNvbXBvbmVudC5wcm9wcyA9IHByb3BzO1xuICAgICAgICAgICAgY29tcG9uZW50Ll9feCA9ICExO1xuICAgICAgICAgICAgaWYgKDAgIT09IHJlbmRlck1vZGUpIGlmICgxID09PSByZW5kZXJNb2RlIHx8ICExICE9PSBvcHRpb25zLnN5bmNDb21wb25lbnRVcGRhdGVzIHx8ICFjb21wb25lbnQuYmFzZSkgcmVuZGVyQ29tcG9uZW50KGNvbXBvbmVudCwgMSwgbW91bnRBbGwpOyBlbHNlIGVucXVldWVSZW5kZXIoY29tcG9uZW50KTtcbiAgICAgICAgICAgIGFwcGx5UmVmKGNvbXBvbmVudC5fX3IsIGNvbXBvbmVudCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcmVuZGVyQ29tcG9uZW50KGNvbXBvbmVudCwgcmVuZGVyTW9kZSwgbW91bnRBbGwsIGlzQ2hpbGQpIHtcbiAgICAgICAgaWYgKCFjb21wb25lbnQuX194KSB7XG4gICAgICAgICAgICB2YXIgcmVuZGVyZWQsIGluc3QsIGNiYXNlLCBwcm9wcyA9IGNvbXBvbmVudC5wcm9wcywgc3RhdGUgPSBjb21wb25lbnQuc3RhdGUsIGNvbnRleHQgPSBjb21wb25lbnQuY29udGV4dCwgcHJldmlvdXNQcm9wcyA9IGNvbXBvbmVudC5fX3AgfHwgcHJvcHMsIHByZXZpb3VzU3RhdGUgPSBjb21wb25lbnQuX19zIHx8IHN0YXRlLCBwcmV2aW91c0NvbnRleHQgPSBjb21wb25lbnQuX19jIHx8IGNvbnRleHQsIGlzVXBkYXRlID0gY29tcG9uZW50LmJhc2UsIG5leHRCYXNlID0gY29tcG9uZW50Ll9fYiwgaW5pdGlhbEJhc2UgPSBpc1VwZGF0ZSB8fCBuZXh0QmFzZSwgaW5pdGlhbENoaWxkQ29tcG9uZW50ID0gY29tcG9uZW50Ll9jb21wb25lbnQsIHNraXAgPSAhMSwgc25hcHNob3QgPSBwcmV2aW91c0NvbnRleHQ7XG4gICAgICAgICAgICBpZiAoY29tcG9uZW50LmNvbnN0cnVjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcykge1xuICAgICAgICAgICAgICAgIHN0YXRlID0gZXh0ZW5kKGV4dGVuZCh7fSwgc3RhdGUpLCBjb21wb25lbnQuY29uc3RydWN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKHByb3BzLCBzdGF0ZSkpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5zdGF0ZSA9IHN0YXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzVXBkYXRlKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LnByb3BzID0gcHJldmlvdXNQcm9wcztcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuc3RhdGUgPSBwcmV2aW91c1N0YXRlO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5jb250ZXh0ID0gcHJldmlvdXNDb250ZXh0O1xuICAgICAgICAgICAgICAgIGlmICgyICE9PSByZW5kZXJNb2RlICYmIGNvbXBvbmVudC5zaG91bGRDb21wb25lbnRVcGRhdGUgJiYgITEgPT09IGNvbXBvbmVudC5zaG91bGRDb21wb25lbnRVcGRhdGUocHJvcHMsIHN0YXRlLCBjb250ZXh0KSkgc2tpcCA9ICEwOyBlbHNlIGlmIChjb21wb25lbnQuY29tcG9uZW50V2lsbFVwZGF0ZSkgY29tcG9uZW50LmNvbXBvbmVudFdpbGxVcGRhdGUocHJvcHMsIHN0YXRlLCBjb250ZXh0KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQucHJvcHMgPSBwcm9wcztcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb21wb25lbnQuX19wID0gY29tcG9uZW50Ll9fcyA9IGNvbXBvbmVudC5fX2MgPSBjb21wb25lbnQuX19iID0gbnVsbDtcbiAgICAgICAgICAgIGNvbXBvbmVudC5fX2QgPSAhMTtcbiAgICAgICAgICAgIGlmICghc2tpcCkge1xuICAgICAgICAgICAgICAgIHJlbmRlcmVkID0gY29tcG9uZW50LnJlbmRlcihwcm9wcywgc3RhdGUsIGNvbnRleHQpO1xuICAgICAgICAgICAgICAgIGlmIChjb21wb25lbnQuZ2V0Q2hpbGRDb250ZXh0KSBjb250ZXh0ID0gZXh0ZW5kKGV4dGVuZCh7fSwgY29udGV4dCksIGNvbXBvbmVudC5nZXRDaGlsZENvbnRleHQoKSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzVXBkYXRlICYmIGNvbXBvbmVudC5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSkgc25hcHNob3QgPSBjb21wb25lbnQuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUocHJldmlvdXNQcm9wcywgcHJldmlvdXNTdGF0ZSk7XG4gICAgICAgICAgICAgICAgdmFyIHRvVW5tb3VudCwgYmFzZSwgY2hpbGRDb21wb25lbnQgPSByZW5kZXJlZCAmJiByZW5kZXJlZC5ub2RlTmFtZTtcbiAgICAgICAgICAgICAgICBpZiAoJ2Z1bmN0aW9uJyA9PSB0eXBlb2YgY2hpbGRDb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkUHJvcHMgPSBnZXROb2RlUHJvcHMocmVuZGVyZWQpO1xuICAgICAgICAgICAgICAgICAgICBpbnN0ID0gaW5pdGlhbENoaWxkQ29tcG9uZW50O1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdCAmJiBpbnN0LmNvbnN0cnVjdG9yID09PSBjaGlsZENvbXBvbmVudCAmJiBjaGlsZFByb3BzLmtleSA9PSBpbnN0Ll9faykgc2V0Q29tcG9uZW50UHJvcHMoaW5zdCwgY2hpbGRQcm9wcywgMSwgY29udGV4dCwgITEpOyBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvVW5tb3VudCA9IGluc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuX2NvbXBvbmVudCA9IGluc3QgPSBjcmVhdGVDb21wb25lbnQoY2hpbGRDb21wb25lbnQsIGNoaWxkUHJvcHMsIGNvbnRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5zdC5fX2IgPSBpbnN0Ll9fYiB8fCBuZXh0QmFzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc3QuX191ID0gY29tcG9uZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q29tcG9uZW50UHJvcHMoaW5zdCwgY2hpbGRQcm9wcywgMCwgY29udGV4dCwgITEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyQ29tcG9uZW50KGluc3QsIDEsIG1vdW50QWxsLCAhMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYmFzZSA9IGluc3QuYmFzZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYmFzZSA9IGluaXRpYWxCYXNlO1xuICAgICAgICAgICAgICAgICAgICB0b1VubW91bnQgPSBpbml0aWFsQ2hpbGRDb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0b1VubW91bnQpIGNiYXNlID0gY29tcG9uZW50Ll9jb21wb25lbnQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5pdGlhbEJhc2UgfHwgMSA9PT0gcmVuZGVyTW9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNiYXNlKSBjYmFzZS5fY29tcG9uZW50ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UgPSBkaWZmKGNiYXNlLCByZW5kZXJlZCwgY29udGV4dCwgbW91bnRBbGwgfHwgIWlzVXBkYXRlLCBpbml0aWFsQmFzZSAmJiBpbml0aWFsQmFzZS5wYXJlbnROb2RlLCAhMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGluaXRpYWxCYXNlICYmIGJhc2UgIT09IGluaXRpYWxCYXNlICYmIGluc3QgIT09IGluaXRpYWxDaGlsZENvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYmFzZVBhcmVudCA9IGluaXRpYWxCYXNlLnBhcmVudE5vZGU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChiYXNlUGFyZW50ICYmIGJhc2UgIT09IGJhc2VQYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VQYXJlbnQucmVwbGFjZUNoaWxkKGJhc2UsIGluaXRpYWxCYXNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdG9Vbm1vdW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbEJhc2UuX2NvbXBvbmVudCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb2xsZWN0Tm9kZVRyZWUoaW5pdGlhbEJhc2UsICExKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodG9Vbm1vdW50KSB1bm1vdW50Q29tcG9uZW50KHRvVW5tb3VudCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmJhc2UgPSBiYXNlO1xuICAgICAgICAgICAgICAgIGlmIChiYXNlICYmICFpc0NoaWxkKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb21wb25lbnRSZWYgPSBjb21wb25lbnQsIHQgPSBjb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlICh0ID0gdC5fX3UpIChjb21wb25lbnRSZWYgPSB0KS5iYXNlID0gYmFzZTtcbiAgICAgICAgICAgICAgICAgICAgYmFzZS5fY29tcG9uZW50ID0gY29tcG9uZW50UmVmO1xuICAgICAgICAgICAgICAgICAgICBiYXNlLl9jb21wb25lbnRDb25zdHJ1Y3RvciA9IGNvbXBvbmVudFJlZi5jb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWlzVXBkYXRlIHx8IG1vdW50QWxsKSBtb3VudHMucHVzaChjb21wb25lbnQpOyBlbHNlIGlmICghc2tpcCkge1xuICAgICAgICAgICAgICAgIGlmIChjb21wb25lbnQuY29tcG9uZW50RGlkVXBkYXRlKSBjb21wb25lbnQuY29tcG9uZW50RGlkVXBkYXRlKHByZXZpb3VzUHJvcHMsIHByZXZpb3VzU3RhdGUsIHNuYXBzaG90KTtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5hZnRlclVwZGF0ZSkgb3B0aW9ucy5hZnRlclVwZGF0ZShjb21wb25lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2hpbGUgKGNvbXBvbmVudC5fX2gubGVuZ3RoKSBjb21wb25lbnQuX19oLnBvcCgpLmNhbGwoY29tcG9uZW50KTtcbiAgICAgICAgICAgIGlmICghZGlmZkxldmVsICYmICFpc0NoaWxkKSBmbHVzaE1vdW50cygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGJ1aWxkQ29tcG9uZW50RnJvbVZOb2RlKGRvbSwgdm5vZGUsIGNvbnRleHQsIG1vdW50QWxsKSB7XG4gICAgICAgIHZhciBjID0gZG9tICYmIGRvbS5fY29tcG9uZW50LCBvcmlnaW5hbENvbXBvbmVudCA9IGMsIG9sZERvbSA9IGRvbSwgaXNEaXJlY3RPd25lciA9IGMgJiYgZG9tLl9jb21wb25lbnRDb25zdHJ1Y3RvciA9PT0gdm5vZGUubm9kZU5hbWUsIGlzT3duZXIgPSBpc0RpcmVjdE93bmVyLCBwcm9wcyA9IGdldE5vZGVQcm9wcyh2bm9kZSk7XG4gICAgICAgIHdoaWxlIChjICYmICFpc093bmVyICYmIChjID0gYy5fX3UpKSBpc093bmVyID0gYy5jb25zdHJ1Y3RvciA9PT0gdm5vZGUubm9kZU5hbWU7XG4gICAgICAgIGlmIChjICYmIGlzT3duZXIgJiYgKCFtb3VudEFsbCB8fCBjLl9jb21wb25lbnQpKSB7XG4gICAgICAgICAgICBzZXRDb21wb25lbnRQcm9wcyhjLCBwcm9wcywgMywgY29udGV4dCwgbW91bnRBbGwpO1xuICAgICAgICAgICAgZG9tID0gYy5iYXNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKG9yaWdpbmFsQ29tcG9uZW50ICYmICFpc0RpcmVjdE93bmVyKSB7XG4gICAgICAgICAgICAgICAgdW5tb3VudENvbXBvbmVudChvcmlnaW5hbENvbXBvbmVudCk7XG4gICAgICAgICAgICAgICAgZG9tID0gb2xkRG9tID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGMgPSBjcmVhdGVDb21wb25lbnQodm5vZGUubm9kZU5hbWUsIHByb3BzLCBjb250ZXh0KTtcbiAgICAgICAgICAgIGlmIChkb20gJiYgIWMuX19iKSB7XG4gICAgICAgICAgICAgICAgYy5fX2IgPSBkb207XG4gICAgICAgICAgICAgICAgb2xkRG9tID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldENvbXBvbmVudFByb3BzKGMsIHByb3BzLCAxLCBjb250ZXh0LCBtb3VudEFsbCk7XG4gICAgICAgICAgICBkb20gPSBjLmJhc2U7XG4gICAgICAgICAgICBpZiAob2xkRG9tICYmIGRvbSAhPT0gb2xkRG9tKSB7XG4gICAgICAgICAgICAgICAgb2xkRG9tLl9jb21wb25lbnQgPSBudWxsO1xuICAgICAgICAgICAgICAgIHJlY29sbGVjdE5vZGVUcmVlKG9sZERvbSwgITEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkb207XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVubW91bnRDb21wb25lbnQoY29tcG9uZW50KSB7XG4gICAgICAgIGlmIChvcHRpb25zLmJlZm9yZVVubW91bnQpIG9wdGlvbnMuYmVmb3JlVW5tb3VudChjb21wb25lbnQpO1xuICAgICAgICB2YXIgYmFzZSA9IGNvbXBvbmVudC5iYXNlO1xuICAgICAgICBjb21wb25lbnQuX194ID0gITA7XG4gICAgICAgIGlmIChjb21wb25lbnQuY29tcG9uZW50V2lsbFVubW91bnQpIGNvbXBvbmVudC5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgICAgICBjb21wb25lbnQuYmFzZSA9IG51bGw7XG4gICAgICAgIHZhciBpbm5lciA9IGNvbXBvbmVudC5fY29tcG9uZW50O1xuICAgICAgICBpZiAoaW5uZXIpIHVubW91bnRDb21wb25lbnQoaW5uZXIpOyBlbHNlIGlmIChiYXNlKSB7XG4gICAgICAgICAgICBpZiAobnVsbCAhPSBiYXNlLl9fcHJlYWN0YXR0cl8pIGFwcGx5UmVmKGJhc2UuX19wcmVhY3RhdHRyXy5yZWYsIG51bGwpO1xuICAgICAgICAgICAgY29tcG9uZW50Ll9fYiA9IGJhc2U7XG4gICAgICAgICAgICByZW1vdmVOb2RlKGJhc2UpO1xuICAgICAgICAgICAgcmVjeWNsZXJDb21wb25lbnRzLnB1c2goY29tcG9uZW50KTtcbiAgICAgICAgICAgIHJlbW92ZUNoaWxkcmVuKGJhc2UpO1xuICAgICAgICB9XG4gICAgICAgIGFwcGx5UmVmKGNvbXBvbmVudC5fX3IsIG51bGwpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBDb21wb25lbnQocHJvcHMsIGNvbnRleHQpIHtcbiAgICAgICAgdGhpcy5fX2QgPSAhMDtcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICAgICAgICB0aGlzLnN0YXRlID0gdGhpcy5zdGF0ZSB8fCB7fTtcbiAgICAgICAgdGhpcy5fX2ggPSBbXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVuZGVyKHZub2RlLCBwYXJlbnQsIG1lcmdlKSB7XG4gICAgICAgIHJldHVybiBkaWZmKG1lcmdlLCB2bm9kZSwge30sICExLCBwYXJlbnQsICExKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlUmVmKCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIHZhciBWTm9kZSA9IGZ1bmN0aW9uKCkge307XG4gICAgdmFyIG9wdGlvbnMgPSB7fTtcbiAgICB2YXIgc3RhY2sgPSBbXTtcbiAgICB2YXIgRU1QVFlfQ0hJTERSRU4gPSBbXTtcbiAgICB2YXIgZGVmZXIgPSAnZnVuY3Rpb24nID09IHR5cGVvZiBQcm9taXNlID8gUHJvbWlzZS5yZXNvbHZlKCkudGhlbi5iaW5kKFByb21pc2UucmVzb2x2ZSgpKSA6IHNldFRpbWVvdXQ7XG4gICAgdmFyIElTX05PTl9ESU1FTlNJT05BTCA9IC9hY2l0fGV4KD86c3xnfG58cHwkKXxycGh8b3dzfG1uY3xudHd8aW5lW2NoXXx6b298Xm9yZC9pO1xuICAgIHZhciBpdGVtcyA9IFtdO1xuICAgIHZhciBtb3VudHMgPSBbXTtcbiAgICB2YXIgZGlmZkxldmVsID0gMDtcbiAgICB2YXIgaXNTdmdNb2RlID0gITE7XG4gICAgdmFyIGh5ZHJhdGluZyA9ICExO1xuICAgIHZhciByZWN5Y2xlckNvbXBvbmVudHMgPSBbXTtcbiAgICBleHRlbmQoQ29tcG9uZW50LnByb3RvdHlwZSwge1xuICAgICAgICBzZXRTdGF0ZTogZnVuY3Rpb24oc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX19zKSB0aGlzLl9fcyA9IHRoaXMuc3RhdGU7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gZXh0ZW5kKGV4dGVuZCh7fSwgdGhpcy5zdGF0ZSksICdmdW5jdGlvbicgPT0gdHlwZW9mIHN0YXRlID8gc3RhdGUodGhpcy5zdGF0ZSwgdGhpcy5wcm9wcykgOiBzdGF0ZSk7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2spIHRoaXMuX19oLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgZW5xdWV1ZVJlbmRlcih0aGlzKTtcbiAgICAgICAgfSxcbiAgICAgICAgZm9yY2VVcGRhdGU6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2spIHRoaXMuX19oLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgcmVuZGVyQ29tcG9uZW50KHRoaXMsIDIpO1xuICAgICAgICB9LFxuICAgICAgICByZW5kZXI6IGZ1bmN0aW9uKCkge31cbiAgICB9KTtcbiAgICB2YXIgcHJlYWN0ID0ge1xuICAgICAgICBoOiBoLFxuICAgICAgICBjcmVhdGVFbGVtZW50OiBoLFxuICAgICAgICBjbG9uZUVsZW1lbnQ6IGNsb25lRWxlbWVudCxcbiAgICAgICAgY3JlYXRlUmVmOiBjcmVhdGVSZWYsXG4gICAgICAgIENvbXBvbmVudDogQ29tcG9uZW50LFxuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgcmVyZW5kZXI6IHJlcmVuZGVyLFxuICAgICAgICBvcHRpb25zOiBvcHRpb25zXG4gICAgfTtcbiAgICBpZiAoJ3VuZGVmaW5lZCcgIT0gdHlwZW9mIG1vZHVsZSkgbW9kdWxlLmV4cG9ydHMgPSBwcmVhY3Q7IGVsc2Ugc2VsZi5wcmVhY3QgPSBwcmVhY3Q7XG59KCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wcmVhY3QuanMubWFwIl19"} \ No newline at end of file diff --git a/themes/humans-of-nosara/validator.js b/themes/humans-of-nosara/validator.js new file mode 100644 index 0000000..29086a1 --- /dev/null +++ b/themes/humans-of-nosara/validator.js @@ -0,0 +1,20 @@ +module.exports.getMissingFields = (item, fieldNames) => { + const missingFields = [] + + fieldNames.forEach(fieldName => { + if (typeof item[fieldName] === 'undefined') { + missingFields.push(fieldName) + } + }) + + return missingFields +} + +module.exports.validate = (item, entity) => { + if (!item) { + return ['Null item'] + } + + return [] + //return module.exports.getMissingFields(item, entity.fields) +} \ No newline at end of file